我想根据我给定的权限显示菜单项,例如,不是项目经理的用户在菜单中看不到项目项目等等。我有一个分开的客户仪表板与管理仪表板,这是不太好和专业。
这里我的代码:
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 Truemenuitem.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‘权限工作?
预先感谢您的帮助
发布于 2018-01-30 07:14:40
在开始之前,如果使用Django REST,则在正常情况下,视图中的响应将是形式为application/json。在本例中,这将帮助您传递`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。
https://stackoverflow.com/questions/48504308
复制相似问题