在Django的许可。

2024-06-16 10:36:50 发布

您现在位置:Python中文网/ 问答频道 /正文

在组织的层级中,如何在部门级提供权限,因为每个员工的数据都在同一个表中。你知道吗

这里S(雇员)是整个组织的基本单位。hierarchy of Employees

现在我想让D部门能看到入口,只有在他们下面的员工, 同样地,对于上层, 谁能告诉我该怎么开始?你知道吗


Tags: 数据权限员工单位部门雇员层级部门级
2条回答

一定是django吗?你知道吗

这种遍历样式的布局看起来更像金字塔的工作。你知道吗

https://pypi.python.org/pypi/django-mptt 似乎是一个很好的起点,为您的树结构,但与权限系统,你是自己的

假设管理器的用户对象有一个名为unit的外键,其级别为它们所代表的级别(B1,C3,…)

首先,您需要一种方法来获取所有员工的后代。就像克莱德提到的,django mptt会让你的生活更轻松。只要在mptt设置正确的情况下运行user.unit.get_leafnodes(),您就拥有了所有受管员工。
MPTTModel.get_leaf_nodes。你知道吗

那你需要利用这些信息。你知道吗

如果您使用的是django管理,那么可以在ModelAdmin.get_queryset中使用它。get\u queryset将请求作为参数。只要访问request.user,你就可以重新站起来了。然后你就可以用ModelAdmin.has_change_permission和家人把事情锁得更紧一些。你知道吗

如果您想要更多的控制,请查看基于类的通用视图。你的views.py可以这么简单:

from django.views import generic
from .models import Employee

class EmployeeList(generic.ListView):
    def get_queryset(self):
        return self.request.user.unit.get_leafnodes() 

class EmployeeCreate(generic.edit.CreateView):
    fields = ["name"]
    def get_queryset(self):
        return self.request.user.unit.get_leafnodes()

class EmployeeUpdate(generic.edit.UpdateView):
    fields = ["name"]
    def get_queryset(self):
        return self.request.user.unit.get_leafnodes()

编辑视图将基于queryset返回的对象创建一个ModelForm。字段属性是必需的。 参见generic viewsthose based on models forms上的文档。你知道吗

相关问题 更多 >