当完成基础业务后,就该着手解决用户的权限问题了。
通过这篇文章,你能了解到:
- RBAC是什么?
- 实现思路与流程
- 实现代码
RBAC是什么?
在Django中,对于我们来说什么是权限呢?具体能体现在什么地方呢?
- 有权限的话就能访问这个url,所以url对应着权限。
那么权限该怎么存储呢?还需要什么呢?
- 除了权限,我们还有用户,最初级的版本是用户与权限建立对应关系,但是随着用户的增多,很多用户具有相同的权限,这样就产生了角色(用户组)的概念;
- 所以我们需要权限,用户,角色,角色与权限,用户与角色五张表。
思路
- 登陆验证:首先用户会进行登录,登录完成后,我们需要将这个用户的权限信息(url)写到session中;
- 权限校验:登陆后,当我们访问别的页面的时候,我们从session中获取该用户的权限,如果当前请求的
url
在权限中就可以访问,如果不在就告知无法访问。当然我们需要设置白名单,因为对于 login,register,admin 这类是不需要校验的,对于 index 这种是登录后所有人都能访问的。
流程
定义视图函数:在
auth.py
中写登录函数,用户名密码验证通过后就查询该用户的权限,并将其放入session中,此外在session中加入登录状态(is_login)定义中间件:在中间件这个类中,定义
process_request
方法,在该方法中,我们将进行权限的校验,- 首先,确定当前
url
不在白名单中(login,register,admin); - 获取登陆状态,确定当前
url
不在免校验名单(index ); - 获取用户权限,确定当前url在不在用户权限内,在的话就能访问,不在则不能访问。
- 首先,确定当前
实现代码
模型如下:
1 | from django.db import models |
登录验证如下:
1 | # auth.py |
权限校验如下:
1 | # rbac.py |