如何在Django中创建自定义权限(用户角色)?
我有个简单的问题。怎么在Django里创建用户角色,而不需要手动在数据库里创建呢?
补充:我需要创建一个特定的权限。这样只有拥有这个权限的用户才能修改模型的某个特定字段。我只需要让某些用户的一个字段变成“只读”。在Django里可以做到吗?
2 个回答
0
你可以看看 django-authority。这个工具可以让你实现对特定对象的权限控制,甚至可以进行一些逻辑判断。逻辑判断并不是存储在数据库里的,而是一些可以接收值并返回 True
或 False
的函数。顺便提一下,我的一个版本实现了django 1.2的对象权限后端,所以你可以像这样使用:userA.hasperm("see_xyz")
7
如果你想创建一个权限,但不想使用数据库,那就意味着你不想用Django的权限系统。在这种情况下,我想问问你,为什么不想用它呢?
如果你愿意使用Django的权限系统,你可以创建一个权限,并通过重写管理员的保存方法来检查这个权限……比如说:
在你的 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()
这种方法的意思是,在你保存记录之前,先获取相关记录的状态,并检查相关的权限。如果用户没有所需的权限,那么你就把字段的值替换成之前的值。如果这是一个新记录,那么你可以把那个字段设置为你想要的任何值。