rbac权限组件使用文档

GitHub 项目地址 https://github.com/wkunzhi/CRM-Manage

【1】将rbac组件拷贝到项目中

【2】 将rbac/migrations中的数据库记录删除(如果有的话)

【3】 业务代码中用户表结构设计

业务表结构中的用户表需要和rbac中的用户表有继承关系如:

1
2
3
4
5
6
7
8
9
10
class UserInfo(models.Model):
"""用户表"""
name = models.CharField(verbose_name='用户名', max_length=32)
password = models.CharField(verbose_name='密码', max_length=64)
roles = models.ManyToManyField(verbose_name='拥有的所有角色', to=Role, blank=True)
...

class Meta:
# 此类可以当做父类,被其他model继承。字段自动过度给,继承的model
abstract = True # 【django以后做数据库迁移时, 不再为UserInfo类创建相关的表以及表结构了】
1
2
3
4
5
# app01/models.py
class UserInfo(RbacUserInfo): # 继承上面那个userinfo
"""用户表"""
phone = models.CharField(verbose_name='联系方式', max_length=32)
depart = models.ForeignKey(verbose_name='部门', to='Department', on_delete=models.CASCADE)

【注意】这种继承关系时如果子继承父中的forekey时,父关联不要用''号


【4】 将业务系统用户表的路径写到配置文件中

1
2
3
'''setting.py'''
# 业务中用户表, 在rbac分配权限时,读取业务表中的用户信息
RBAC_USER_MODEL_CLASS = 'app01.models.UserInfo' # 具体填写自建的 路径

【5】 业务逻辑开发

  • 将所有路由都设一个name【必须】才会反向生成url和粒度控制按钮

【6】 权限录入

  • 在url中添加rbac的路由分发【必须设置namespace=’rbac’】
1
2
# 根路由加上如下代码
url(r'^rbac/', include(('rbac.urls', 'rbac'), namespace='rbac')),
  • rbac提供的地址进行操作初始化
作用 地址
菜单管理 /rbac/menu/list
角色管理 /rbac/role/list
权限分配 /rbac/distribute/permissions

【7】 编写用户登录的逻辑

  • 例:【必须做权限初始化】
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def login(request):
    if request.method == 'GET':
    return render(request, 'login.html')

    ...校验登录...

    '''利用rbac组件登录成功,初始化用户权限'''
    init_permission(user_obj, request)

    return redirect('/index/')

【8】 相关配置 setting.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 业务中用户表需要关联
RBAC_USER_MODEL_CLASS = 'app01.models.UserInfo'

# 权限 key
PERMISSION_SESSION_KEY = "zok_permission_url_list_key" # 名字根据项目更改
# 菜单 key
MENU_SESSION_KEY = 'zok_menu_list_key' # 名字根据项目更改

# 访问白名单
VALID_URL_LIST = [
'/login/',
'/admin/.*',

]

# 需要登录但无需权限的URL
NO_PERMISSION_LIST = [
'/logout/',
'/index/',
]

# 自动收录路由白名单,自动忽略的名单
AUTO_DISCOVER_EXCLUDE = [
'/admin/.*',
'/login/',
'/logout/',
'/index/',
]

【9】 权限校验中间件

  • setting中配置引入中间件
1
rbac.middlewares.rbac.RbacMiddleware,
  • setting中加入app
1
'rbac.apps.RbacConfig',

【10】 粒度到按钮控制

利用rbac中写好的filter进行

has_permission 管道符

1
{% if request|has_permission:'user_del' %}{% endif %}

总结

  • 用户登录+用户首页+用户注销 业务逻辑
  • 项目业务逻辑开发
    注意:开发适合灵活的去设置 layout.html 中的两个inclusion_tag 测试的时候注释掉即可
  • 权限信息录入
  • 配置文件整合