使用django-guardian进行基于角色的访问

时间:2013-03-26 17:04:10

标签: django django-forms django-templates django-admin django-guardian

我使用django-guardian提供基于角色的权限,使用django-userena进行用户分析。我有三种用户Admin,sub-admin,employee。管理员可以添加子管理员和子管理员可以添加员工。我在三个用户类型的监护人中创建了三个组。用户注册时,我为该用户分配一个员工组。

class Profile(UserenaBaseProfile):
    class Meta:
    permissions = ( 
                ( "add_admin", "Can add admin" ),
                ( "add_subadmin", "Can add sub admin" ),
                ( "add_employee", "Can add employee" ),
            )
    user = models.OneToOneField(User,
                            unique=True,
                            verbose_name='user',
                            related_name='profile')
    first_name = models.CharField('First name',max_length=100,blank=False,null=False)
    def save(self, *args, **kwargs):
        super(Profile, self).save(*args, **kwargs)
        employee_group = Group.objects.get('employee')
        self.groups.add(employee_group)

我想使用Django Admin并为Admin和sub-admin提供更改用户组的功能。

如何使用AdminModel在“管理”面板中添加下拉列表或单选按钮,以便我可以更改用户的组。或者有更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:1)

您正在寻找Admin actions,您必须编写一些自定义管理操作。

更新

创建管理员时,您可以检查当前request.user是否能够看到该操作。我们可以这样说,如果用户不是管理员,那么自定义操作方法应该返回Nonepass。有一个应用程序可以在代码中的任何位置获取当前用户,当您无权访问当前用户请求时,它被称为django-cuser。它适用于您需要确定使用是admin还是sub-admin来为他提供自定义操作的情况。

Conditionally enabling or disabling actions

开始