我想根据给定的权限显示菜单项,例如不是项目经理的用户,他们在菜单中看不到项目项目等等。 我在管理仪表板上有一个独立的客户机仪表板,这不是那么好和专业。
这是我的代码:
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"),)
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())
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
<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'权限让我的类视图工作?
提前感谢您的帮助
答案 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。