python通用权限管理框架图_Django web自定义通用权限控制实现方法

需求: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('''修改密码'''))

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

二、前端根据用户权限生成菜单

{% block side-bar %}

{% 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=True

break

if not flag:

if settings.DEBUG: #如果是程序调试应该 显示用户可以访问的权限

url_html='
'.join(Permission_url_list)

return HttpResponse('无权访问您可以访问%s'%url_html)

else:

return HttpResponse('没有权限')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值