组件源码:https://github.com/skxgood03/rbac
#### 使用自定义rbac权限组件
1. 拷贝rbac组件
2. 清空migration目录
3. 在setting注册rbac
```python
'rbac', #django 2.0以上
```
4. 数据库迁移录入信息
5. 创建超级管理,添加权限信息(组件admin.py已经定制化)
6. 用户登录后做权限和菜单的初始化 `init_permission`
```python
from web import models
from rbac import models
#调用自定义权限和菜单组件
from rbac.service.init_permission import init_permission
def login(request):
'''
登录代码,成功后调用init_permission传入request、登录用户信息(obj)
'''
if request.method == 'GET':
return render(request,'login.html')
name=request.POST.get('name')
pwd=request.POST.get('pwd')
obj = models.UserInfo.objects.filter(name=name,password=pwd).first()
if not obj:
return render(request,'login.html',{'msg':'用户名密码错误'})
request.session['user_info'] = {'id':obj.id,'name':obj.name}
init_permission(request,obj)
return redirect('/customer/list/')
```
7. 应用中间件,进行权限校验
```python
'rbac.middleware.rbac.RbacMiddleware'
```
8. 设置setting配置文件
```python
#############权限相关#######################
PERMISSION_SESSION_KEY = 'permissions_list'
MENU_SESSION_KEY = 'menu_list'
#白名单
VALID_URL = [
'^/login/$',
'^/admin/.*',
]
```
9. 显示动态菜单(引入静态文件)、在菜单栏 `+{% menu request %}`、最上方导入`{% load rbac %}`
10. 粒度控制到按钮
1. ```python
#加在需要控制的按钮上
{% if request|has_permission:'add' %}
<td><a href="{% url 'add' %}">增加</a></td>
{% endif %}
```
2.