创建组和修改视图访问 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/report1
、127.0.0.1:8000/manager/report2
、127.0.0.1:8000/employee/report3
我有三个用户:
Director
、Manager
、Employee
我如何创建网站,以便当用户注册到该网站时,创建他们的个人资料并随后分配一个组,然后根据用户组限制对某些页面的访问(这比为每个用户分配权限)。例如:
用户 Director 属于名为 directors
的组,并且可以访问 127.0.0.1:8000/director/report1
、127.0.0.1:8000/manager/report2
、127.0.0.1:8000/employee/report3
。
用户经理属于名为 managers
的组,并且可以访问 127.0.0.1:8000/manager/report2
、127.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.
我正在使用 Django 3.0.7 和 Python 3.8 构建一个 Web 应用程序,它将使用一些商业智能工具,如 Tableau 或 Power BI,作为报告源。
我使用的代码绝对没有问题,但是我需要能够根据创建的组降低某些页面的可见性。例如:
如果我有三个pages/dashboards:
127.0.0.1:8000/director/report1
、127.0.0.1:8000/manager/report2
、127.0.0.1:8000/employee/report3
我有三个用户:
Director
、Manager
、Employee
我如何创建网站,以便当用户注册到该网站时,创建他们的个人资料并随后分配一个组,然后根据用户组限制对某些页面的访问(这比为每个用户分配权限)。例如:
用户 Director 属于名为 directors
的组,并且可以访问 127.0.0.1:8000/director/report1
、127.0.0.1:8000/manager/report2
、127.0.0.1:8000/employee/report3
。
用户经理属于名为 managers
的组,并且可以访问 127.0.0.1:8000/manager/report2
、127.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.