我强烈推荐
django-guardian
来处理这个问题。Django guardian允许直接的对象级权限管理。
要解决您的问题,您只需添加
Meta
类创建到您的工作区模型,您可以在其中创建自定义权限。
class Workspace(models.Model):
name = models.CharField(max_length=100)
users = models.ManyToManyField(User, related_name='workspaces')
class Meta:
default_permissions = ('add', 'change', 'delete')
permissions = (
('access_workspace', 'Access workspace'),
)
Assign
附加到特定工作区的用户或组。
assign_perm('access_workspace', user, workspace)
#This will return True if the user has been properly assigned the permission
user.has_perm('access_workspace', workspace)
然后,要获取用户可以访问的所有工作空间,只需调用
get_objects_for_user()
在你看来
queryset = get_objects_for_user(self.request.user, 'project.access_workspace')