gpt4 book ai didi

python - django中基于角色实现访问控制

转载 作者:行者123 更新时间:2023-12-01 06:38:03 25 4
gpt4 key购买 nike

我需要帮助在我的 django 项目上实现访问控制。有两个主要角色:销售和开发人员。在这两个角色中,还有另一个层次结构:经理和非经理。根据他们的角色,我想显示不同的内容并执行不同类型的查询。

我当前使用的方法是扩展我的用户模型以包含这些角色,并在我的模板中使用 if 语句来相应地显示功能。

这是我的模型:

class UserProfile(models.Model):
role = (
('sm','sales_manager'),
('s','sales'),
('rm','rnd_manager'),
('r','rnd')
)
user = models.OneToOneField(User,on_delete=models.CASCADE)
user_type = models.TextField(max_length=500, choices= role)
contact = models.IntegerField(default=92388112)

def __str__(self):
return str(self.user.username)

这是我的观点:

    @login_required(login_url='login')
def rnd/home(request):
print(request.user.username)
context = {
'userProfile' : UserProfile.objects.all(),
}
return render(request, 'rnd/home.html',context)

这是我的模板的相关部分:

  {%if user.get_UserProfile.user_type == 's' or user.get_UserProfile.user_type == 'sm' %}
<p>Sales</p>
{%else%}
<p>RnD</p>
{%endif%}
<li>

但是,我的 for 循环不起作用。它不会抛出任何错误,但也不执行任何操作。当我以“r”类型登录时,销售额仍然会显示在我的屏幕上。

如果有人能够回答我,并留下一些关于实现此类访问控制的最佳方法的提示,不仅在功能方面,而且在过滤常见功能中显示的数据方面,那就太好了。

最佳答案

我在您的代码中没有看到任何for 循环。但是,如果您只想从 User 获取 UserProfile,则可以直接从任一方式获取 OneToOne 模型。在您的情况下,它将是user.userProfile.user_type

您可能还想查看Django Custom Permissions

关于python - django中基于角色实现访问控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59575061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com