时间:2021-05-22
需求: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 ="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、角色表:
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二、前端根据用户权限生成菜单
这样就可以根据用户生成菜单,但是如果用户不是通过菜单方法,而是直接通过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=True break if not flag: if settings.DEBUG: #如果是程序调试应该 显示用户可以访问的权限 url_html='<br/>'.join(Permission_url_list) return HttpResponse('无权访问您可以访问%s'%url_html) else: return HttpResponse('没有权限')以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文讲述springboot整合springsecurity在方法上使用注解实现权限控制,使用自定义userdetailservice,从mysql中加载用户信
下面将以权限的控制为例自定义一个标签:一、标签类型复制代码代码如下:步骤:1.自定义一个类PerssionTag继承SimpleTagSupport(自定义标签
本文实例讲述了AngularJS实现自定义指令与控制器数据交互的方法。分享给大家供大家参考,具体如下:AngularJS自定义指令与控制器数据交互angular
本文介绍了SpringBoot通过AOP和自定义注解实现权限控制,分享给大家,具体如下:源码:https://github.com/yulc-coding/ja
前言其实实现悬浮的自定义窗体有很多方法,自定义Dialog,自定义layout均可以实现。自定义activity也是可以的,今天我就介绍一下activity的实