【问题标题】:How to restrict access to particular rows in django如何限制对 django 中特定行的访问
【发布时间】:2012-05-31 11:01:02
【问题描述】:

我正在使用 Django 管理工具,并且我的模型非常简单。我想限制对特定用户或特定组的特定密码的访问。如何为访问“是/否/从不”设置 3 个条件,当用户获得“是”+他的组“否”时,他可以访问,但是当“是”+“从不”时则没有。以及如何使其与 django-admin-tools 权限系统一起使用。

from django.db import models
from passwords.objects.labels.models import Label

class Password(models.Model):
    class Meta:
        db_table = 'passwords'

    name = models.CharField(max_length=32)
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=32)
    labels = models.ManyToManyField(Label)

    def __unicode__(self):
        return self.name

【问题讨论】:

    标签: python django django-admin django-admin-tools


    【解决方案1】:

    开箱即用,django 仅支持类级别的权限(换句话说,上的权限)。

    支持对象级(行级)权限,但 django 并没有提供开箱即用的实现:

    对象级权限

    在每个对象级别指定权限的基础具有 被添加。尽管在核心中没有实现这一点,但 自定义身份验证后端可以提供此实现,并且它 将由 django.contrib.auth.models.User 使用。见 身份验证文档以获取更多信息。

    因此,有像 django-guardian 这样的第三方应用程序可以启用此功能。

    【讨论】:

      【解决方案2】:

      由于您使用的是管理员,因此您可以覆盖 ModelAdmin 上的 has_add_permissionhas_change_permissionhas_delete_permission 方法。但是,如果不知道您的“是/否/从不”权限是如何附加到用户/组的,我真的无法进一步帮助您。

      更新

      如果您想保持简单,最好的方法是简单地创建一个组,例如“PasswordAccess”。然后,将您想要的任何用户分配给该组,并仅将Password 的默认添加、更改和删除权限分配给该组。

      没有其他要求。添加到该组的任何用户都将自动继承Password 的权限,任何其他用户都不会拥有这些权限,因此甚至不会在管理员中看到它。

      【讨论】:

      • 非常感谢大家的帮助,Yes/No/Never 可能过于复杂,尤其是我刚刚开始学习 Python,所以我如何设置 Yes/No 以便任何用户必须拥有或个人许可或必须在有权读取密码的组中。
      猜你喜欢
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多