国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Django web自定義通用權(quán)限控制實(shí)現(xiàn)方法

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

需求:web系統(tǒng)有包含以下5個(gè)url,分別對(duì)于不同資源;

1、stu/add_stu/

2、stu/upload_homework/

3、stu/query_homework/

4、stu/add_record/

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

學(xué)生可以訪問(wèn):2,3

老師可以訪問(wèn):1,4

可以通過(guò)基于角色對(duì)用戶(hù)權(quán)限進(jìn)行控制:

一、數(shù)據(jù)模型

1、用戶(hù)表:用戶(hù)表和角色表為多對(duì)多關(guān)系,1個(gè)用戶(hù)可以有多個(gè)角色,1個(gè)角色可以被多個(gè)用戶(hù)劃分;

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.cgvv.com.cn/bcjs/password/' >修改密碼</a>’’’))name = models.CharField(max_length=32,help_text=’用戶(hù)登陸后請(qǐng)修改為真實(shí)名字’)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): '''動(dòng)態(tài)菜單''' 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

二、前端根據(jù)用戶(hù)權(quán)限生成菜單

<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.cgvv.com.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 %}

這樣就可以根據(jù)用戶(hù)生成菜單,但是如果用戶(hù)不是通過(guò)菜單方法,而是直接通過(guò)url訪問(wèn),后臺(tái)還是沒(méi)有對(duì)這些url進(jìn)行控制

三、后臺(tái)根據(jù)用戶(hù)權(quán)限控制菜單訪問(wèn)

裝飾器:

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

class Mddile1(MiddlewareMixin): def process_request(self,request): #如果用戶(hù)訪問(wèn)的url是登錄、注冊(cè)頁(yè)面,記錄到白名單,放行 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) #如果用戶(hù)訪問(wèn)的url 不在當(dāng)前用戶(hù)權(quán)限之內(nèi) 返回login頁(yè)面 if not Permission_url_list: return redirect(settings.LOGIN_URL) current_url=request.path_info #由于數(shù)據(jù)庫(kù)的數(shù)據(jù),可能是正則所有 一定要精確匹配 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: #如果是程序調(diào)試應(yīng)該 顯示用戶(hù)可以訪問(wèn)的權(quán)限url_html=’<br/>’.join(Permission_url_list)return HttpResponse(’無(wú)權(quán)訪問(wèn)您可以訪問(wèn)%s’%url_html) else:return HttpResponse(’沒(méi)有權(quán)限’)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 国产农村乱子伦精品视频 | 成人在线a | 亚洲成网站 | 男人天堂视频在线 | 亚洲伦乱 | 欧美一区视频 | 欧美日韩一区二区综合在线视频 | 99爱视频精品免视看 | 成人做爰在线视频 | 日韩一级a毛片欧美区 | 国产农村乱子伦精品视频 | 日韩精品免费一级视频 | 失禁h啪肉尿出来高h男男 | 国产欧美一区二区三区视频 | 欧美精品一区二区三区免费 | 欧洲免费无线码二区5 | 精品国产不卡一区二区三区 | 亚洲制服丝袜美腿亚洲一区 | 真人一级一级特黄高清毛片 | 国产精品欧美一区二区三区 | 久久免费播放 | 久久国产夜色精品噜噜亚洲a | 免费国产在线观看 | 国产高清视频免费最新在线 | 毛片在线视频 | 9久久99久久久精品齐齐综合色圆 | 欧美一级二级毛片视频 | 三级黄网 | 欧美一区二区三区视频 | 一级做a爰片性色毛片男 | 亚洲精品国产福利一区二区三区 | 一级片大全 | 欧美成人影院 在线播放 | 欧美三级免费 | 韩国美女一级毛片 | 日韩一级欧美一级 | 性刺激欧美三级在线现看中文 | 日本一级特黄a大片在线 | a级淫片 | 999成人国产精品 | 亚洲日韩视频免费观看 |