首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django_permissions,如何根据权限模板我的菜单项?在view.py中

Django_permissions,如何根据权限模板我的菜单项?在view.py中
EN

Stack Overflow用户
提问于 2018-01-29 15:07:36
回答 1查看 1.9K关注 0票数 2

我想根据我给定的权限显示菜单项,例如,不是项目经理的用户在菜单中看不到项目项目等等。我有一个分开的客户仪表板与管理仪表板,这是不太好和专业。

这里我的代码:

models.py

代码语言:javascript
运行
复制
class Customer(models.Model): 
    birthday= models.DateField(blank=True, null=True)
    address= models.CharField(max_length=50, blank=True, null=True)
    auth_user = models.ForeignKey(to=User)

    class Meta:
        db_table = 'Customer'
        permissions = (("view_user", "Can_view_user"),)

views.py

代码语言:javascript
运行
复制
class UsersListView(PermissionRequiredMixin, LoginRequiredMixin, ListView):
    login_url = 'accounts/login/'
    permission_required = 'can_view_user'
    template_name = "user_list.html"
    model = User

    def dispatch(self, request, *args, **kwargs):
        if check_permission_BM_or_AM(request):
            if request.user.is_authenticated():
                return super(UsersListView, self).dispatch(request, *args, **kwargs)
        return redirect_to_login(self.request.get_full_path(),
                             self.get_login_url(),
                             self.get_redirect_field_name())

permission.py

代码语言:javascript
运行
复制
def check_permission_BM_or_AM(request):
    customer= Customer.objects.get(auth_user_id=request.user.id)
    marolle = MaRolle.objects.filter(ma=customer.id)
    rollen = Rollen.objects.get(id=1)
    rollens = Rollen.objects.get(id=4)
    for ma in marolle:
        if str(ma.rolle) == rollen.rolle or str(ma.rolle) == rollens.rolle:
            return True

menuitem.html

代码语言:javascript
运行
复制
<ul>
    <li class="dropdown-submenu ">
        {% if perms.user %}
            <a tabindex="-1" href="/user/list/"><span
                    class="fa fa-fw fa-book "></span> Users</a>
        {% endif %}
    </li>
</ul>

如何使用模板使我的类视图基于给定的`permission_required = 'can_view_user‘权限工作?

预先感谢您的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-30 07:14:40

在开始之前,如果使用Django REST,则在正常情况下,视图中的响应将是形式为application/json。在本例中,将帮助您传递`permission_required = 'can_view_user‘。

但是,将尝试提供一个通用的概念,即如何使用Django实现基于权限的功能。让仪表板中可用的三种功能是menu_1、menu_2和menu_3。

代码语言:javascript
运行
复制
{% if can_view_menu1 %} 
    Menu option 1
{% endif %} 
{% if can_view_menu2 %}
    Menu option 2
{% endif %} 
{% if can_view_menu3 %}
    Menu option 3
{% endif %} 

在视图类中,可以检查登录用户的角色并提供权限。一个例子如下所示。

代码语言:javascript
运行
复制
class YourViewClass(ListView):
    # By default noone is permitted to access the view.
    can_view_menu_1 = False
    can_view_menu_2 = False
    can_view_menu_3 = False

    def dispatch(self, reuest, *args, **kwargs):
        if check_permission_RM(request): # returns True if user is RM
            self.can_view_menu_1 = True
        if check_permission_AM_or_PM(request): # returns True if logged in user is AM or PM.
            self.can_view_menu_1 = True
            self.can_view_menu_2 = True
            self.can_view_menu_3 = True
            return super(UsersListView, self).dispatch(request, *args, **kwargs)

记住将这些变量作为上下文传递,或者使用DRF templatehtmlrenderer。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48504308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档