创建组和修改视图访问 Django

Creating Groups and Modifying View Access Django

我正在使用 Django 3.0.7 和 Python 3.8 构建一个 Web 应用程序,它将使用一些商业智能工具,如 Tableau 或 Power BI,作为报告源。

我使用的代码绝对没有问题,但是我需要能够根据创建的组降低某些页面的可见性。例如:

如果我有三个pages/dashboards: 127.0.0.1:8000/director/report1127.0.0.1:8000/manager/report2127.0.0.1:8000/employee/report3

我有三个用户: DirectorManagerEmployee

我如何创建网站,以便当用户注册到该网站时,创建他们的个人资料并随后分配一个组,然后根据用户组限制对某些页面的访问(这比为每个用户分配权限)。例如:

用户 Director 属于名为 directors 的组,并且可以访问 127.0.0.1:8000/director/report1127.0.0.1:8000/manager/report2127.0.0.1:8000/employee/report3

用户经理属于名为 managers 的组,并且可以访问 127.0.0.1:8000/manager/report2127.0.0.1:8000/employee/report3

用户 Employee 将属于一个名为 employees 的组,并且可以访问 127.0.0.1:8000/employee/report3

我在这里找到了一些与权限相关的信息:https://docs.djangoproject.com/en/2.1/_modules/django/contrib/auth/decorators/ 但我找不到与创建组和分配权限相关的信息。

您可以使用名为 staff 的新模型扩展 django 中的默认用户 class,并添加一个包含主管、经理和员工的字符字段,如下所示:

from django.contrib.auth.models import User

class Staff(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    DIRECTOR = "DR"
    MANAGER = "MG"
    EMPLOYEE = "EM"
    DESIGNATION_CHOICES = [
        (DIRECTOR, "Director"),
        (MANAGER, "Manager"),
        (EMPLOYEE, "Employee"),
    ]
    designation = models.CharField(
        max_length=2,
        choices=DEISGNATION_CHOICES,
        default=DIRECTOR,
    )

然后您可以在视图中提供必要的 if,else 条件,prevent/allow 特定类别的成员将对特定页面提出请求。

一种实现方法可以是:

#assuming you are using this view function corresponding to '/director/' url
def director_page(request):
  if request.user.is_authenticated:
    user = request.user
    staff = Staff_objects.get(user__id=1)
    if staff.designation == "Director":
      ...#allow director to proceed
    else:
      ...#return an error response
  else:
    ... # Do something for anonymous users.