-
拷贝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 %}