首页 > 解决方案 > Django:创建将两个“用户”对象关联在一起的权限

问题描述

有没有办法建立一个权限系统,其中权限将User对象关联在一起,即一个人User可能有权读取另一个User人的信息(但不一定相反)?我已经阅读了文档,但它很稀疏,据我所知,权限无法处理动态用例。

基本上,我想要一个权限系统来确定两个以上模型对象可以对彼此“做什么”。

如果您对如何将其集成到 Django Rest Framework 有任何意见,则可以加分。

标签: djangodjango-modelsdjango-rest-framework

解决方案


一种方法是覆盖 BasePermission 类来创建您的自定义权限。您可以使用 User 模型中的额外字段指定访问权限。

class UserPermission(BasePermission):   

    def has_permission(self, request, view):
        is_allowed_user = False
        try:
            permission = Permission.objects.get(user=request.user.id, user1=request.GET.get('user'))
            if permission.is_read_enabled:
                is_allowed_user = True
            else
                is_allowed_user = False
        except Permission.DoesNotExist as e:
            is_allowed_user = False        
        return is_allowed_user

创建模型以指定权限

class Permission(models.Model):
    user = models.ForeignKey(User,...)
    user1 = models.ForeignKey(User,...)
    is_read_enabled = models.BooleanField(defualt=False)

根据需要添加此权限以查看。


推荐阅读