Refactored the permissions registration, checking and definition
This commit is contained in:
@@ -8,20 +8,20 @@ from navigation.api import register_links
|
||||
from permissions.conf.settings import DEFAULT_ROLES
|
||||
from permissions.models import Role
|
||||
|
||||
PERMISSION_ROLE_VIEW = 'role_view'
|
||||
PERMISSION_ROLE_EDIT = 'role_edit'
|
||||
PERMISSION_ROLE_CREATE = 'role_create'
|
||||
PERMISSION_ROLE_DELETE = 'role_delete'
|
||||
PERMISSION_PERMISSION_GRANT = 'permission_grant'
|
||||
PERMISSION_PERMISSION_REVOKE = 'permission_revoke'
|
||||
PERMISSION_ROLE_VIEW = {'namespace': 'permissions', 'name': 'role_view', 'label':_(u'View roles')}
|
||||
PERMISSION_ROLE_EDIT = {'namespace': 'permissions', 'name': 'role_edit', 'label':_(u'Edit roles')}
|
||||
PERMISSION_ROLE_CREATE = {'namespace': 'permissions', 'name': 'role_create', 'label':_(u'Create roles')}
|
||||
PERMISSION_ROLE_DELETE = {'namespace': 'permissions', 'name': 'role_delete', 'label':_(u'Delete roles')}
|
||||
PERMISSION_PERMISSION_GRANT = {'namespace': 'permissions', 'name': 'permission_grant', 'label':_(u'Grant permissions')}
|
||||
PERMISSION_PERMISSION_REVOKE = {'namespace': 'permissions', 'name': 'permission_revoke', 'label':_(u'Revoke permissions')}
|
||||
|
||||
|
||||
role_list = {'text': _(u'roles'), 'view': 'role_list', 'famfam': 'medal_gold_1', 'permissions': {'namespace': 'permissions', 'permissions': [PERMISSION_ROLE_VIEW]}}
|
||||
role_create = {'text': _(u'create new role'), 'view': 'role_create', 'famfam': 'medal_gold_add', 'permissions': {'namespace': 'permissions', 'permissions': [PERMISSION_ROLE_CREATE]}}
|
||||
role_edit = {'text': _(u'edit'), 'view': 'role_edit', 'args': 'object.id', 'famfam': 'medal_gold_1', 'permissions': {'namespace': 'permissions', 'permissions': [PERMISSION_ROLE_EDIT]}}
|
||||
role_members = {'text': _(u'members'), 'view': 'role_members', 'args': 'object.id', 'famfam': 'group_key', 'permissions': {'namespace': 'permissions', 'permissions': [PERMISSION_ROLE_EDIT]}}
|
||||
role_permissions = {'text': _(u'role permissions'), 'view': 'role_permissions', 'args': 'object.id', 'famfam': 'key_go', 'permissions': {'namespace': 'permissions', 'permissions': [PERMISSION_PERMISSION_GRANT, PERMISSION_PERMISSION_REVOKE]}}
|
||||
role_delete = {'text': _(u'delete'), 'view': 'role_delete', 'args': 'object.id', 'famfam': 'medal_gold_delete', 'permissions': {'namespace': 'permissions', 'permissions': [PERMISSION_ROLE_DELETE]}}
|
||||
role_list = {'text': _(u'roles'), 'view': 'role_list', 'famfam': 'medal_gold_1', 'permissions': [PERMISSION_ROLE_VIEW]}
|
||||
role_create = {'text': _(u'create new role'), 'view': 'role_create', 'famfam': 'medal_gold_add', 'permissions': [PERMISSION_ROLE_CREATE]}
|
||||
role_edit = {'text': _(u'edit'), 'view': 'role_edit', 'args': 'object.id', 'famfam': 'medal_gold_1', 'permissions': [PERMISSION_ROLE_EDIT]}
|
||||
role_members = {'text': _(u'members'), 'view': 'role_members', 'args': 'object.id', 'famfam': 'group_key', 'permissions': [PERMISSION_ROLE_EDIT]}
|
||||
role_permissions = {'text': _(u'role permissions'), 'view': 'role_permissions', 'args': 'object.id', 'famfam': 'key_go', 'permissions': [PERMISSION_PERMISSION_GRANT, PERMISSION_PERMISSION_REVOKE]}
|
||||
role_delete = {'text': _(u'delete'), 'view': 'role_delete', 'args': 'object.id', 'famfam': 'medal_gold_delete', 'permissions': [PERMISSION_ROLE_DELETE]}
|
||||
|
||||
register_links(Role, [role_edit, role_delete, role_permissions, role_members])
|
||||
register_links(['role_members', 'role_list', 'role_view', 'role_create', 'role_edit', 'role_permissions', 'role_delete'], [role_create, role_list], menu_name='sidebar')
|
||||
|
||||
+17
-23
@@ -11,36 +11,30 @@ from permissions import PERMISSION_ROLE_VIEW, PERMISSION_ROLE_EDIT, \
|
||||
from permissions.models import Permission
|
||||
|
||||
|
||||
def register_permissions(namespace, permissions):
|
||||
if permissions:
|
||||
for permission in permissions:
|
||||
try:
|
||||
permission_obj, created = Permission.objects.get_or_create(
|
||||
namespace=namespace, name=permission['name'])
|
||||
permission_obj.label = unicode(permission['label'])
|
||||
permission_obj.save()
|
||||
except DatabaseError:
|
||||
#Special case for ./manage.py syncdb
|
||||
pass
|
||||
def register_permission(permission):
|
||||
try:
|
||||
permission_obj, created = Permission.objects.get_or_create(
|
||||
namespace=permission['namespace'], name=permission['name'])
|
||||
permission_obj.label = unicode(permission['label'])
|
||||
permission_obj.save()
|
||||
except DatabaseError:
|
||||
#Special case for ./manage.py syncdb
|
||||
pass
|
||||
|
||||
|
||||
#TODO: Handle anonymous users
|
||||
def check_permissions(requester, namespace, permission_list):
|
||||
def check_permissions(requester, permission_list):
|
||||
for permission_item in permission_list:
|
||||
permission = get_object_or_404(Permission,
|
||||
namespace=namespace, name=permission_item)
|
||||
#if check_permission(requester, permission):
|
||||
namespace=permission_item['namespace'], name=permission_item['name'])
|
||||
if permission.has_permission(requester):
|
||||
return True
|
||||
|
||||
raise PermissionDenied(ugettext(u'Insufficient permissions.'))
|
||||
|
||||
|
||||
register_permissions('permissions', [
|
||||
{'name': PERMISSION_ROLE_VIEW, 'label':_(u'View roles')},
|
||||
{'name': PERMISSION_ROLE_EDIT, 'label':_(u'Edit roles')},
|
||||
{'name': PERMISSION_ROLE_CREATE, 'label':_(u'Create roles')},
|
||||
{'name': PERMISSION_ROLE_DELETE, 'label':_(u'Delete roles')},
|
||||
{'name': PERMISSION_PERMISSION_GRANT, 'label':_(u'Grant permissions')},
|
||||
{'name': PERMISSION_PERMISSION_REVOKE, 'label':_(u'Revoke permissions')},
|
||||
])
|
||||
register_permission(PERMISSION_ROLE_VIEW)
|
||||
register_permission(PERMISSION_ROLE_EDIT)
|
||||
register_permission(PERMISSION_ROLE_CREATE)
|
||||
register_permission(PERMISSION_ROLE_DELETE)
|
||||
register_permission(PERMISSION_PERMISSION_GRANT)
|
||||
register_permission(PERMISSION_PERMISSION_REVOKE)
|
||||
|
||||
@@ -8,9 +8,8 @@ register = Library()
|
||||
|
||||
|
||||
class CheckPermissionsNode(Node):
|
||||
def __init__(self, requester, namespace=None, permission_list=None, *args, **kwargs):
|
||||
def __init__(self, requester, permission_list=None, *args, **kwargs):
|
||||
self.requester = requester
|
||||
self.namespace = namespace
|
||||
self.permission_list = permission_list
|
||||
|
||||
def render(self, context):
|
||||
@@ -21,9 +20,8 @@ class CheckPermissionsNode(Node):
|
||||
context[u'permission'] = True
|
||||
return u''
|
||||
requester = Variable(self.requester).resolve(context)
|
||||
namespace = Variable(self.namespace).resolve(context)
|
||||
try:
|
||||
check_permission_function(requester, namespace, permission_list)
|
||||
check_permission_function(requester, permission_list)
|
||||
context[u'permission'] = True
|
||||
return u''
|
||||
except PermissionDenied:
|
||||
|
||||
@@ -23,7 +23,7 @@ from permissions.api import check_permissions
|
||||
|
||||
|
||||
def role_list(request):
|
||||
check_permissions(request.user, 'permissions', [PERMISSION_ROLE_VIEW])
|
||||
check_permissions(request.user, [PERMISSION_ROLE_VIEW])
|
||||
|
||||
return object_list(
|
||||
request,
|
||||
@@ -54,7 +54,7 @@ def _role_permission_link(requester, permission, permission_list):
|
||||
|
||||
|
||||
def role_permissions(request, role_id):
|
||||
check_permissions(request.user, 'permissions', [PERMISSION_PERMISSION_GRANT, PERMISSION_PERMISSION_REVOKE])
|
||||
check_permissions(request.user, [PERMISSION_PERMISSION_GRANT, PERMISSION_PERMISSION_REVOKE])
|
||||
|
||||
role = get_object_or_404(Role, pk=role_id)
|
||||
form = RoleForm_view(instance=role)
|
||||
@@ -89,7 +89,7 @@ def role_permissions(request, role_id):
|
||||
|
||||
|
||||
def role_edit(request, role_id):
|
||||
check_permissions(request.user, 'permissions', [PERMISSION_ROLE_EDIT])
|
||||
check_permissions(request.user, [PERMISSION_ROLE_EDIT])
|
||||
|
||||
return update_object(request, template_name='generic_form.html',
|
||||
form_class=RoleForm, object_id=role_id, extra_context={
|
||||
@@ -97,7 +97,7 @@ def role_edit(request, role_id):
|
||||
|
||||
|
||||
def role_create(request):
|
||||
check_permissions(request.user, 'permissions', [PERMISSION_ROLE_CREATE])
|
||||
check_permissions(request.user, [PERMISSION_ROLE_CREATE])
|
||||
|
||||
return create_object(request, model=Role,
|
||||
template_name='generic_form.html',
|
||||
@@ -105,7 +105,7 @@ def role_create(request):
|
||||
|
||||
|
||||
def role_delete(request, role_id):
|
||||
check_permissions(request.user, 'permissions', [PERMISSION_ROLE_DELETE])
|
||||
check_permissions(request.user, [PERMISSION_ROLE_DELETE])
|
||||
|
||||
next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', None)))
|
||||
previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', None)))
|
||||
@@ -129,12 +129,12 @@ def permission_grant_revoke(request, permission_id, app_label, module_name, pk,
|
||||
permission = get_object_or_404(Permission, pk=permission_id)
|
||||
|
||||
if action == 'grant':
|
||||
check_permissions(request.user, 'permissions', [PERMISSION_PERMISSION_GRANT])
|
||||
check_permissions(request.user, [PERMISSION_PERMISSION_GRANT])
|
||||
title = _(u'Are you sure you wish to grant the permission "%(permission)s" to %(ct_name)s: %(requester)s') % {
|
||||
'permission': permission, 'ct_name': ct.name, 'requester': requester}
|
||||
|
||||
elif action == 'revoke':
|
||||
check_permissions(request.user, 'permissions', [PERMISSION_PERMISSION_REVOKE])
|
||||
check_permissions(request.user, [PERMISSION_PERMISSION_REVOKE])
|
||||
title = _(u'Are you sure you wish to revoke the permission "%(permission)s" from %(ct_name)s: %(requester)s') % {
|
||||
'permission': permission, 'ct_name': ct.name, 'requester': requester}
|
||||
else:
|
||||
@@ -202,7 +202,7 @@ def remove_role_member(role, selection):
|
||||
|
||||
|
||||
def role_members(request, role_id):
|
||||
check_permissions(request.user, 'permissions', [PERMISSION_ROLE_EDIT])
|
||||
check_permissions(request.user, [PERMISSION_ROLE_EDIT])
|
||||
role = get_object_or_404(Role, pk=role_id)
|
||||
|
||||
return assign_remove(
|
||||
|
||||
Reference in New Issue
Block a user