基于web的Django访问控制的实现

2024-05-18 04:27:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要帮助在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”类型登录时,屏幕上仍然会显示销售额

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


Tags: 方法模型模板角色类型ifmodelsrequest
1条回答
网友
1楼 · 发布于 2024-05-18 04:27:55

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

您可能还想看看Django Custom Permissions

相关问题 更多 >