2009-07-06 09:10:08 +00:00
|
|
|
from django import forms, template
|
2009-07-03 16:04:22 +00:00
|
|
|
from django.contrib import admin
|
2009-06-08 10:00:44 +00:00
|
|
|
from django.contrib.contenttypes import generic
|
2009-07-06 09:10:08 +00:00
|
|
|
from django.contrib.contenttypes.models import ContentType
|
|
|
|
|
from django.contrib.auth.models import User
|
|
|
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
|
from django.http import HttpResponseForbidden, HttpResponseRedirect, Http404
|
|
|
|
|
from django.core.urlresolvers import reverse
|
|
|
|
|
from django.conf.urls.defaults import patterns, url
|
|
|
|
|
from django.db import models
|
|
|
|
|
from django.utils.safestring import mark_safe
|
|
|
|
|
from django.shortcuts import get_object_or_404, render_to_response
|
2009-07-03 16:04:22 +00:00
|
|
|
|
2009-06-08 10:00:44 +00:00
|
|
|
from authority.models import Permission
|
2009-07-03 16:04:22 +00:00
|
|
|
from authority import permissions
|
2009-06-08 10:00:44 +00:00
|
|
|
|
|
|
|
|
class PermissionInline(generic.GenericTabularInline):
|
|
|
|
|
model = Permission
|
2009-07-03 16:04:22 +00:00
|
|
|
raw_id_fields = ('user', 'group', 'creator')
|
2009-07-06 09:10:08 +00:00
|
|
|
extra = 1
|
|
|
|
|
|
|
|
|
|
def get_formset(self, request, obj=None, **kwargs):
|
|
|
|
|
self.current_user = request.user
|
|
|
|
|
return super(PermissionInline, self).get_formset(request, obj, **kwargs)
|
2009-07-03 16:04:22 +00:00
|
|
|
|
|
|
|
|
def formfield_for_dbfield(self, db_field, **kwargs):
|
|
|
|
|
if db_field.name == 'codename':
|
|
|
|
|
perm_choices = permissions.registry.get_choices_for(self.parent_model)
|
2009-07-06 09:10:08 +00:00
|
|
|
kwargs['label'] = _('permission')
|
2009-07-03 16:04:22 +00:00
|
|
|
kwargs['widget'] = forms.Select(choices=perm_choices)
|
|
|
|
|
return db_field.formfield(**kwargs)
|
2009-07-06 09:10:08 +00:00
|
|
|
elif db_field.name == 'screator':
|
|
|
|
|
field = db_field.formfield(**kwargs)
|
|
|
|
|
field.initial = self.current_user.id
|
|
|
|
|
return field
|
|
|
|
|
return super(PermissionInline, self).formfield_for_dbfield(db_field, **kwargs)
|
2009-06-08 10:00:44 +00:00
|
|
|
|
2009-07-03 16:04:22 +00:00
|
|
|
class PermissionAdmin(admin.ModelAdmin):
|
2009-06-08 10:00:44 +00:00
|
|
|
list_display = ('codename', 'content_type', 'user', 'group')
|
|
|
|
|
list_filter = ('codename', 'content_type')
|
2009-07-06 09:10:08 +00:00
|
|
|
search_fields = ('user', 'group')
|
|
|
|
|
raw_id_fields = ('user', 'group')
|
2009-06-08 10:00:44 +00:00
|
|
|
fieldsets = (
|
|
|
|
|
(None, {
|
|
|
|
|
'fields': ('codename', ('content_type', 'object_id'))
|
|
|
|
|
}),
|
2009-07-06 09:10:08 +00:00
|
|
|
(_('granted'), {
|
2009-06-08 10:00:44 +00:00
|
|
|
'fields': ('user', 'group', 'creator')
|
|
|
|
|
}),
|
|
|
|
|
)
|
2009-07-06 09:10:08 +00:00
|
|
|
permission_change_form_template = None
|
2009-06-08 10:00:44 +00:00
|
|
|
|
|
|
|
|
def queryset(self, request):
|
|
|
|
|
user = request.user
|
|
|
|
|
if user.is_superuser or \
|
|
|
|
|
user.has_perm('permissions.change_foreign_permissions'):
|
|
|
|
|
return super(PermissionAdmin, self).queryset(request)
|
|
|
|
|
return super(PermissionAdmin, self).queryset(request).filter(creator=user)
|
|
|
|
|
|
2009-07-03 16:04:22 +00:00
|
|
|
admin.site.register(Permission, PermissionAdmin)
|