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

时间:2018-01-29 15:07:37

标签: python django

我想根据给定的权限显示菜单项,例如不是项目经理的用户,他们在菜单中看不到项目项目等等。 我在管理仪表板上有一个独立的客户机仪表板,这不是那么好和专业。

这是我的代码:

models.py

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

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

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

<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'权限让我的类视图工作?

提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

在开始之前,如果您使用的是Django REST,则视图中的响应将采用application / json格式。在这种情况下,This将帮助您传递`permission_required ='can_view_user'。

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

形式
{% if can_view_menu1 %} 
    Menu option 1
{% endif %} 
{% if can_view_menu2 %}
    Menu option 2
{% endif %} 
{% if can_view_menu3 %}
    Menu option 3
{% endif %} 

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

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。