如何在Django中创建自定义权限(用户角色)?

时间:2010-10-30 18:18:25

标签: python django

我有一个简单的问题。如何在Django中创建用户角色而不用手动在DB中创建它?

编辑:我需要创建特定权限。因此,只有拥有此权限的用户才能更改模型的特定字段。 我只需要为某些用户创建一个“readonly”字段。 django有可能吗?

2 个答案:

答案 0 :(得分:7)

不使用数据库创建烫发意味着您不想使用django权限系统。在那一点上,我会问为什么你不想使用它?

如果可以使用django权限sywstem,则可以通过覆盖管理员保存方法来创建权限并进行检查...赞:

models.py

class SomeModel(Model):
    your_spec_field = FieldType(...)
    class Meta:
        permissions = (
            ("some_perm", u"A name for your default permission"),
        )

在您的相关admin.py

class SomeModelAdmin(ModelAdmin):
    def save_model(self, request, obj, form, change):
        if change:
            curr_value = SomeModel.objects.get(pk=obj.id)
            if not request.user.has_perm('<your_app>.some_perm'):
                obj.your_spec_field = curr_value.your_spec_field
        else:
            if not request.user.has_perm('<your_app>.some_perm')
                obj.your_spec_field = '' # or the default value according to your field type
        obj.save()

在此方法中,您在保存相关记录之前获取相关记录的状态并检查相关权限。如果用户没有要求的烫发。然后用前一个字段替换字段的值。如果这是一条新记录,则将该字段设置为您想要的任何值。

答案 1 :(得分:0)

您可以查看django-authority。它允许您实现对象级权限,甚至逻辑检查。逻辑检查不存储在数据库中,但是可以传递值并返回TrueFalse的函数。 无耻的插件:我的fork实现了django 1.2对象权限后端,所以你可以使用它:userA.hasperm("see_xyz")