亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Django web自定義通用權限控制實現方法

瀏覽:87日期:2024-09-18 08:06:24

需求:web系統有包含以下5個url,分別對于不同資源;

1、stu/add_stu/

2、stu/upload_homework/

3、stu/query_homework/

4、stu/add_record/

--------------------------------------------------------------------------------------------------------

學生可以訪問:2,3

老師可以訪問:1,4

可以通過基于角色對用戶權限進行控制:

一、數據模型

1、用戶表:用戶表和角色表為多對多關系,1個用戶可以有多個角色,1個角色可以被多個用戶劃分;

email = models.EmailField( verbose_name=’email address’, max_length=255, unique=True,) password = models.CharField(_(’password’),max_length=128, help_text=mark_safe(’’’<a href ='http://www.aoyou183.cn/bcjs/password/' >修改密碼</a>’’’))name = models.CharField(max_length=32,help_text=’用戶登陸后請修改為真實名字’)is_active = models.BooleanField(default=True)is_admin = models.BooleanField(default=False)role = models.ManyToManyField('Role')def __str__(self): return self.email

2、角色表:

class Role(models.Model): '''角色表''' name = models.CharField(unique=True,max_length=32) menus = models.ManyToManyField('Menu') def __str__(self): return self.name

3、菜單表:

class Menu(models.Model): '''動態菜單''' name = models.CharField(unique=True,max_length=32) url_type = models.SmallIntegerField(choices=((0,’relative_name’),(1,’absolute_url’))) url_name = models.CharField(unique=True,max_length=128) def __str__(self): return self.name

二、前端根據用戶權限生成菜單

<div class='container-fluid'> <div class='row'> {% block side-bar %} <div class='col-sm-3 col-md-2 sidebar'> <ul class='nav nav-sidebar'> {% block side-bar-menus %} {% for role in request.user.userprofile.roles.all %}<hr>{% for menu in role.menus.all %} <li> <a href='http://www.aoyou183.cn/bcjs/{% if menu.url_type == 0 %}{% url menu.url_name %}{% else %} {{ menu.url_name }}{% endif %}' rel='external nofollow' > {{ menu.name }} </a> </li>{% endfor %} {% endfor %} {% endblock %} </ul> </div> {% endblock %}

這樣就可以根據用戶生成菜單,但是如果用戶不是通過菜單方法,而是直接通過url訪問,后臺還是沒有對這些url進行控制

三、后臺根據用戶權限控制菜單訪問

裝飾器:

簡言之,python裝飾器就是用于拓展原來函數功能的一種函數,這個函數的特殊之處在于它的返回值也是一個函數,使用python裝飾器的好處就是在不用更改原函數的代碼前提下給函數增加新的功能。

class Mddile1(MiddlewareMixin): def process_request(self,request): #如果用戶訪問的url是登錄、注冊頁面,記錄到白名單,放行 for url in settings.PASS_URL_LIST: if re.match(url,request.path_info):return None Permission_url_list=request.session.get(settings.SESSION_PERMISSION_URL_KEY) #如果用戶訪問的url 不在當前用戶權限之內 返回login頁面 if not Permission_url_list: return redirect(settings.LOGIN_URL) current_url=request.path_info #由于數據庫的數據,可能是正則所有 一定要精確匹配 flag=False for url in Permission_url_list: url=’^%s$’%(url) if re.match(url,current_url):flag=Truebreak if not flag: if settings.DEBUG: #如果是程序調試應該 顯示用戶可以訪問的權限url_html=’<br/>’.join(Permission_url_list)return HttpResponse(’無權訪問您可以訪問%s’%url_html) else:return HttpResponse(’沒有權限’)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Django
相關文章:
主站蜘蛛池模板: 国产一区二区三区四区五区六区 | 亚洲国产精品成人精品软件 | 国产精品第一区亚洲精品 | 日本肥老太成熟 | 免费精品在线观看 | 国产欧美一区二区三区视频在线观看 | 色在线视频免费 | 国产福利视频在线播放 | 国产亚洲美女精品久久久久 | 欧美精品一区二区三区视频 | 青草精品 | 自拍 欧美 在线 综合 另类 | 久久99热不卡精品免费观看 | 欧美日韩一区二区三区在线播放 | 亚洲成在人线久久综合 | 在线国产91 | 久久网址 | 久久精品视频观看 | 久久蜜桃亚洲一区二区 | 成人黄色在线免费观看 | 久久se精品一区精品二区 | aⅴ在线免费观看 | 国产视频xxxx | 午夜网站在线观看 | 天堂黄色网 | 自拍视频第一页 | 亚洲精品视频免费在线观看 | 在线综合视频 | 欧美一级毛片日韩一级 | 亚洲精品国产成人一区二区 | 性欧美一级毛片在线播放 | 国产裸舞福利在线视频合集 | 亚洲欧美人成人让影院 | 51久久夜色精品国产 | 婷婷好色 | 成 人 黄 色 大 片 | 羞羞答答www网址进入在线观看 | 日韩美女网站在线看 | 伊人狼人在线 | 老司机观看精品一区二区 | 亚洲精品人成网在线播放蜜芽 |