我需要帮助在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
相关问题 更多 >
编程相关推荐