首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django管理员限制权限

Django管理员限制权限
EN

Stack Overflow用户
提问于 2017-08-21 16:09:39
回答 1查看 203关注 0票数 0

在我的Django项目中,我有模型ProjectPersonTaskInfo

然而,问题是,项目是父模型。人员、任务、信息属于项目。

如果我添加人员、任务或信息,我必须选择它所属的项目(ForeignKey)。

我的问题是:这些项目是独立的,我有不同的项目经理。我的目标是在管理界面中,例如项目A的项目经理只能向他的项目添加一个人,与Info和Task相同。

我不希望项目A的项目经理可以看到/编辑/添加/删除项目B的内容。不幸的是,我在Django管理员中找不到符合我要求的选项。

如果项目经理登录,他应该只看到属于他的项目的实例,其他什么也看不到。

你将如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2017-08-21 17:00:38

根据我的理解,我认为你的模型结构是这样的:

代码语言:javascript
复制
class Project(models.Model):
    manager = models.ForeignKey(User)
    ...

class Person(models.Model):
    project = models.ForeignKey(Project)
    ...

admin.py中,您可以执行各种修改来实现您的目标

代码语言:javascript
复制
class PersonAdmin(admin.ModelAdmin):
    # other code

    # this function will list persons
    # only whose project has current user as project manager
    def get_queryset(self, request):
        qs = super(PersonAdmin, self).get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(project__manager__user=request.user)

    # this function will list the projects in dropdowns
    # who has current user as project manager
    def render_change_form(self, request, context, *args, **kwargs):
        if not request.user.is_superuser:
            context['adminform'].form.fields['project'].queryset = Project.objects.filter(manager__user=request.user)
        return super(PersonAdmin, self).render_change_form(request, context, args, kwargs)

    # this function is used for edit permission
    def has_change_permission(self, request, obj=None):
    if not obj:
        return True 
    return obj.project.manager.user == request.user or request.user.is_superuser

    # this function is used for delete permission
    def has_delete_permssion(self, request, obj=None):
        if not obj:
            return True
        return obj.project.manager.user == request.user or request.user.is_superuser

类似的方法也可用于管理中的其他模型

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45792144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档