创建组和修改视图访问Django

2024-10-01 17:28:11 发布

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

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

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

如果我有三个页面/仪表板: 127.0.0.1:8000/director/report1127.0.0.1:8000/manager/report2127.0.0.1:8000/employee/report3

我有三个用户: DirectorManagerEmployee

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

用户控制器将属于一个名为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

用户雇员将属于名为employees的组,并有权访问127.0.0.1:8000/employee/report3

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


Tags: django用户web信息应用程序权限网站employee
1条回答
网友
1楼 · 发布于 2024-10-01 17:28:11

您可以使用名为staff的新模型扩展django中的默认用户类,并添加带有director、manager和employee的charfield,如下所示:

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条件,以防止/允许某些类别的成员请求某些页面

实现这一点的一种方法可以是:

#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.

相关问题 更多 >

    热门问题