权限组件---rbac

权限组件—rbac

什么是权限?

对系统功能进行限制

权限与应用

权限可以应用于多个应用中

用户、角色、权限

不给用户直接分配权限,通过将用户分配角色,给角色分配权限
一个包含正则表达式的url相当于一个权限
用户登录成功后:
	1.查询当前用户的所有权限
		1.1查询用户的角色
		ret = user.roles.all()
		1.2查询角色对应的权限
		ret = ret.values('permissions__url').distinct()
		permission_list = []
		for i in ret:
			permission_list.append(i['permissions_url'])
	2.将权限保存到缓存中
	request.session['user_id'] = user.pk
	request.session['permission_list'] = permission_list
用户访问url:
	1.取当前用户权限:
    permission_list = request.session['permission_list']
    current_path = request.path_info
    2.判断是否权限匹配
    import re
    flag = Flase
    for permission in permission_list:
        permission = '^%S$' % permission
        ret = re.match(permission, current_path)
        if ret:
            flag = True
            break
     if not flag:
     	return HttpResponse("没有权限")
     
     return None
每一个视图都需要进行权限判断,太臃肿,需要将权限判断的代码进行抽取、封装成一个中间件

中间件

本质:方便用户在访问视图的时候,判断用户时候拥有访问此视图的权限
实现逻辑:用户访问视图,系统在用户请求前,先判断此视图的路径是否在系统的白名单中,然后获取用户的所有权限,再将当前视图路径与用户权限进行匹配,以此达到测试用户是否能访问视图

class RbacMiddleware(MiddlewareMixin):
	
	def process_request(self, request):
		current_url = requst.path_info
		for valid_url in valid_url_list:
			if re.match(valid_url, current_url):
				return None
				
		user = request.session.get('user_id')
		if not user:
			return redirct('/login/')
			
		permission_list = request.session.get('permission_list')
		flag = Flase
		for permission in permission_list:
			permission = '^%s$' % permission
			ret = re.match(permission, current_url)
			if ret:
				flag = True
				break
		if not flag:
			return HttpResponse('没有权限')
		
		return None

抽取用户登录函数中关于权限的代码

def init_permission(request, user):
	
	ret = user.roles.all()
	ret = ret.values('permissions__url').distinct()
	permission_list = []
	for i in ret:
		permission_list.append(i['permissions_url'])
	request.session['user_id'] = user.pk
	request.session['permission_list'] = permission_list	

总结

1. 创建表,三个表,迁移,都是多对多关系
	1.1 用户表
	1.2 角色表
	1.3 权限表
2. 录入数据
3. 登录校验
	if 登录成功:
		将用户注册到缓存中
		查询当前登录用户的权限注册到session中
4. 校验权限
	4.1 创建中间件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值