【问题标题】:Creating Groups and Modifying View Access Django创建组和修改视图访问 Django
【发布时间】:2020-06-25 17:36:45
【问题描述】:

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

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

如果我有三个页面/仪表板: 127.0.0.1:8000/director/report1, 127.0.0.1:8000/manager/report2, 127.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

用户 Manager 将属于名为 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/,但我找不到与创建组和分配权限相关的信息。

【问题讨论】:

    标签: python python-3.x django django-permissions django-3.0


    【解决方案1】:

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

    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.
    

    【讨论】:

    • 嗨德维。这似乎可行,因为我将class Staff 添加到models.py 和def director_page 到我的views.py,当我创建一个用户并尝试访问我的示例页面时,我被拒绝了。现在我的问题是,您在哪里将用户分配到创建的特定组?
    • 最简单的方法是通过您的 django 管理界面分配名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 2017-05-04
    • 1970-01-01
    • 2018-08-01
    • 2011-01-29
    相关资源
    最近更新 更多