django-authority/src/authority/admin.py

57 lines
2.4 KiB
Python
Raw Normal View History

2009-07-06 09:26:53 +00:00
from django import forms
from django.contrib import admin
2009-06-08 10:00:44 +00:00
from django.contrib.contenttypes import generic
from django.utils.translation import ugettext_lazy as _
from django.utils.text import capfirst, truncate_words
2009-06-08 10:00:44 +00:00
from authority.models import Permission
from authority.widgets import GenericForeignKeyRawIdWidget
from autority import get_choices_for
2009-06-08 10:00:44 +00:00
class PermissionInline(generic.GenericTabularInline):
model = Permission
raw_id_fields = ('user', 'group', 'creator')
extra = 1
def formfield_for_dbfield(self, db_field, **kwargs):
if db_field.name == 'codename':
perm_choices = get_choices_for(self.parent_model)
kwargs['label'] = _('permission')
kwargs['widget'] = forms.Select(choices=perm_choices)
return db_field.formfield(**kwargs)
return super(PermissionInline, self).formfield_for_dbfield(db_field, **kwargs)
2009-06-08 10:00:44 +00:00
class PermissionAdmin(admin.ModelAdmin):
2009-06-08 10:00:44 +00:00
list_display = ('codename', 'content_type', 'user', 'group')
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'))
}),
(_('granted'), {
'fields': ('creator', ('user', 'group'),)
2009-06-08 10:00:44 +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)
admin.site.register(Permission, PermissionAdmin)