crm项目和权限管理流程:
-
拷贝rbac的APP到新的项目中,并且注册
INSTALLED_APPS = [
...
\'rbac.apps.RbacConfig\'
]
-
数据库迁移
class User(models.Model):
# username = models.CharField(max_length=32, verbose_name=\'用户名\', unique=True)
# password = models.CharField(max_length=32, verbose_name=\'密码\')
roles = models.ManyToManyField(Role, verbose_name=\'用户所拥有的角色\', blank=True)
def __str__(self):
return self.username
class Meta:
abstract = True # 该model不会生成对应的表,专门做基类使用的用户表要继承rbac的User
from rbac.models import User
class UserProfile(User):
执行数据库迁移的命令
python manage.py makemigrations
python manage.py migrate -
在根的urlconf中分发rbac的urls.py
urlpatterns = [
url(r\'^admin/\', admin.site.urls),
...
url(r\'^rbac/\', include(\'rbac.urls\', namespace=\'rbac\')),
] -
录入信息
http://127.0.0.1:8000/rbac/role/list/ 角色管理
-
分配权限
http://127.0.0.1:8000/rbac/distribute/permissions/
替换用户表
models.User ——》 UserProfile
给角色分配权限
给用户分配角色
-
在settings中配置权限的相关配置
# 白名单
WHITE_LIST = [
r\'^/login/$\',
r\'^/reg/$\',
r\'^/admin/.*\'
]
# 免认证的地址
NO_PERMISSION_LIST = [
r\'^/index/$\',
]
# 存放权限的session的key
PERMISSION_SESSION_KEY = \'permission\'
# 存放菜单的session的key
MENU_SESSION_KEY = \'menu\' -
登录成功后进行权限信息的初始化
from rbac.service.permission_init import permission_init
permission_init(obj,request) -
应用权限的中间件
MIDDLEWARE = [
...
\'rbac.middlewares.rbac.RbacMiddleWare\'
] -
动态的二级菜单
{% load rbac %}
{% menu request %}
引入 css 和 js
<link rel="stylesheet" href="{% static \'rbac/css/menu.css\' %} "/>
<script src="{% static \'rbac/js/menu.js\' %} "></script> -
路径导航
{% breadcrumb request %}
-
权限控制到按钮级别
{% load rbac %}
{% if request|has_permission:\'edit_customer\' %}
<th>操作</th>
{% endif %}