创建组和修改视图访问 Django



我正在使用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

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

用户 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 中的默认用户类,并添加一个包含董事、经理和员工的查菲尔德,如下所示:

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.

最新更新