2009-07-06 09:26:53 +00:00
|
|
|
from django import forms
|
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.utils.translation import ugettext_lazy as _
|
2009-07-07 00:10:20 +00:00
|
|
|
from django.utils.text import capfirst, truncate_words
|
2009-07-03 16:04:22 +00:00
|
|
|
|
2009-06-08 10:00:44 +00:00
|
|
|
from authority.models import Permission
|
2009-07-07 00:10:20 +00:00
|
|
|
from authority.widgets import GenericForeignKeyRawIdWidget
|
2009-07-10 09:44:00 +00:00
|
|
|
from autority import get_choices_for
|
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
|
|
|
|
|
|
2009-07-03 16:04:22 +00:00
|
|
|
def formfield_for_dbfield(self, db_field, **kwargs):
|
|
|
|
|
if db_field.name == 'codename':
|
2009-07-10 09:44:00 +00:00
|
|
|
perm_choices = 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
|
|
|
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')
|
2009-07-07 00:10:20 +00:00
|
|
|
list_filter = ('content_type',)
|
|
|
|
|
search_fields = ('user__username', 'group__name', 'codename')
|
|
|
|
|
raw_id_fields = ('user', 'group', 'creator')
|
|
|
|
|
generic_fields = ('content_object',)
|
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-07-07 00:10:20 +00:00
|
|
|
'fields': ('creator', ('user', 'group'),)
|
2009-06-08 10:00:44 +00:00
|
|
|
}),
|
|
|
|
|
)
|
|
|
|
|
|
2009-07-07 00:10:20 +00:00
|
|
|
def formfield_for_dbfield(self, db_field, **kwargs):
|
|
|
|
|
# For generic foreign keys marked as generic_fields we use a special widget
|
|
|
|
|
if db_field.name in [f.fk_field for f in self.model._meta.virtual_fields if f.name in self.generic_fields]:
|
|
|
|
|
for gfk in self.model._meta.virtual_fields:
|
|
|
|
|
if gfk.fk_field == db_field.name:
|
|
|
|
|
return db_field.formfield(
|
|
|
|
|
widget=GenericForeignKeyRawIdWidget(
|
|
|
|
|
gfk.ct_field, self.admin_site._registry.keys()))
|
|
|
|
|
return super(PermissionAdmin, self).formfield_for_dbfield(db_field, **kwargs)
|
|
|
|
|
|
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)
|