基于Django组的用户访问控制

时间:2017-07-07 07:48:26

标签: django permissions django-rest-framework access-control

在我的Django管理员中,我添加了一个名为privilage class的新字段以及组和用户权限。

所以,我的用户表有privilage_class基于我可以访问多个组。每个组都有user_permissions。

我进行了管理员设置但未实现权限。该怎么做?

例如:

user having priv class executive 
Privilege class if executive he having access to multiple groups->
    Assets
    Billing
    etc 

每个组都带有用户权限(URL),

Assets -> assets related URL
Billing -> related URLs
etc...  

设置已完成。但不知道如何申请许可。

我知道很难理解,但亲们会理解。所以请好好帮助我。

我正在使用django和DRF

提前致谢!

1 个答案:

答案 0 :(得分:2)

您必须编写自己的自定义权限类,以决定当用户属于特定权限类时要执行的操作。这个网址[1]有文档来实现它。

示例实现:

class UserPrevilagePermission(permissions.BasePermission):

    def has_permission(self, request, view):
        user = request.user
        # check if the user has required permission based on request url
        if 'assets' in request.path:
           # decide which perm to check
           if user.has_perm('perm-name-to-check'):
               return True
        return False

现在在视图中使用此权限类,如此处所述[2]。

从这里查看用户对象的django权限方法[3]。

[1] http://www.django-rest-framework.org/api-guide/permissions/#custom-permissions

[2] http://www.django-rest-framework.org/api-guide/permissions/#setting-the-permission-policy

[3] https://docs.djangoproject.com/en/1.11/ref/contrib/auth/#methods