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

标签 python django

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

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

最佳答案

在不使用 DB 的情况下创建 perm 意味着您不想使用 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()

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

关于python - 如何在 Django 中创建自定义权限(用户角色)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4060052/

相关文章:

通过uWSGI运行时Django忽略环境变量

python - Django 分页与 get_absolute_url 方法

django - 如何正确缩进 Django 模板

python - 如何通过 python 中的 for 循环创建具有随机属性值的对象?

python - 在python中将输入限制为仅整数并显示错误消息

python - 基于键对少数字典的操作

java - Python子进程不传递参数

python - 在 Flask View 中获取传递给 url_for 的 kwargs

python - 如何将数据传递给 django 中的序列化器

django - 如何序列化二进制文件以用于 celery 任务