首页 > 解决方案 > My site shows menus based on a users privs. I have a function that returns the privs as a dictionary as below:

问题描述

i need to show my sidebar dynamically by using 6 privilages which giving by admin to users. this is my views.py which i set in my django function.i used checkbox to select 6 privilages here.privilages are ecom,service,career,course,blog,offline. for admin status=1,subadmin status=2.

def SIDEMENU(request):
# ii=request.session['sid']

a=db_coslogin.objects.all().filter(ecom=1,status=2)
b=db_coslogin.objects.all().filter(blog=1,status=2)
c=db_coslogin.objects.all().filter(servive=1,status=2)
d=db_coslogin.objects.all().filter(offline=1,status=2)
e=db_coslogin.objects.all().filter(career=1,status=2)
f=db_coslogin.objects.all().filter(course=1,status=2)

return render(request, "sidebar.html",{'ecomr':a,'blog':b,'servive':c,'offline':d,'career':e,'course':f})

models.py

class db_coslogin(models.Model):
id = models.AutoField(primary_key=True)


name = models.CharField(max_length=100)

username = models.CharField(max_length=100)
password = models.CharField(max_length=100)


type1 = models.CharField(max_length=50)
last_updated = models.DateTimeField(auto_now_add=False, auto_now=True)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
is_delete = models.IntegerField(default=0)
ecom = models.IntegerField(default=0)
service = models.IntegerField(default=0)
career = models.IntegerField(default=0)
cource = models.IntegerField(default=0)
offline = models.IntegerField(default=0)
blog = models.IntegerField(default=0)
status = models.IntegerField(default=0)




class Meta:
    db_table = "db_coslogin"

标签: djangodynamicsidebarprivileges

解决方案


如果您想继续使用现有模型和视图,可以在模板中执行以下操作:

{% if ecomr.0.ecom %}
  {% include 'ecom_menu.html' %}
{% elif blog.0.blog %}
  {% include 'blog_menu.html' %}
{% else %}
  ...
{% endif %}

但是,我强烈建议阅读 Django 的内置权限https://docs.djangoproject.com/en/3.1/topics/auth/default/#default-permissions。这将允许您编写更清晰的代码,更重要的是,更安全。


推荐阅读