1、将 rbac
组件拷贝到项目
2、添加 url
,Project/urls.py
from django.contrib import admin
from django.urls import path, include
from app.views import RegisterView, LogoutView, ImageCodeView, LoginView, IndexView
urlpatterns = [
path('admin/', admin.site.urls),
path('app/', include('app.urls'), name='app'),
# rbac 组件
path('rbac/', include('rbac.urls'), name='rbac'),
path('register/', RegisterView.as_view(), name='register'),
path('login/', LoginView.as_view(), name='login'),
path('logout/', LogoutView.as_view(), name='logout'),
path('image_code/', ImageCodeView.as_view(), name='image-code'), # 图片验证码
path('', IndexView.as_view(), name='index'), # 首页
]
3、settings
配置
# 个人 app 中的 UserProfile 模型
AUTH_USER_MODEL = 'app.UserProfile'
# 白名单,不需要添加权限验证的 URL,比如登陆、注册啥的
SAFE_URL = [r'^/$',
'/register/',
'/login/',
'/logout',
'/media/',
'/admin/',
'/ckeditor/',
'/image_code/',
]
# session 超时时间
SESSION_COOKIE_AGE = 60 * 20 # session有效时间为20分钟
SESSION_EXPIRE_AT_BROWSER_CLOSE = True # 关闭浏览器Cookie失效
SESSION_SAVE_EVERY_REQUEST = True # 以上两个配置需要配合这一条才能够生效
4、modes.py
from rbac.models import UserInfo
# 继承 rbac/models.py 中的 UserInfo 模型
class UserProfile(UserInfo):
addr = models.CharField(max_length=64, verbose_name='家庭地址', null=True, blank=True)
create_nums = models.IntegerField(verbose_name='创建数量', null=True, blank=True)
def __str__(self):
"""13650300368"""
return self.username
class Meta:
verbose_name_plural = '用户表'
迁移数据表:
python manage.py makemigrations
python manage.py migrate
5、录入菜单:
1 系统 SYSTEM /rbac/ 1.0
2 基础设置 fa fa-gg SYSTEM-BASIC 1.1 1
3 组织架构 SYSTEM-BASIC-STRUCTURE /rbac/basic/structure/ 1.11 2
4 组织架构:创建 SYSTEM-BASIC-STRUCTURE-CREATE /rbac/basic/structure/create/ 1.112 3
5 组织架构:列表 SYSTEM-BASIC-STRUCTURE-LIST /rbac/basic/structure/list/ 1.111 3
6 组织架构:删除 SYSTEM-BASIC-STRUCTURE-DELETE /rbac/basic/structure/delete/ 1.113 3
7 组织架构:关联用户 SYSTEM-BASIC-STRUCTURE-ADD_USER /rbac/basic/structure/add_user/ 1.114 3
8 用户管理 SYSTEM-BASIC-USER /rbac/basic/user/ 1.12 2
9 用户管理:列表 SYSTEM-BASIC-USER-LIST /rbac/basic/user/list/ 1.121 8
10 用户管理:详情 SYSTEM-BASIC-USER-DETAIL /rbac/basic/user/detail/ 1.122 8
11 用户管理:修改 SYSTEM-BASIC-USER-UPDATE /rbac/basic/user/update/ 1.123 8
12 用户管理:创建 SYSTEM-BASIC-USER-CREATE /rbac/basic/user/create/ 1.123 8
13 用户管理:删除 SYSTEM-BASIC-USER-DELETE /rbac/basic/user/delete/ 1.124 8
14 用户管理:启用 SYSTEM-BASIC-USER-ENABLE /rbac/basic/user/enable/ 1.125 8
15 用户管理:禁用 SYSTEM-BASIC-USER-DISABLE /rbac/basic/user/disable/ 1.126 8
16 用户管理:修改密码 SYSTEM-BASIC-USER-PASSWORD_CHANGE /rbac/basic/user/password_change/ 1.127 8
17 权限管理 fa fa-user-plus SYSTEM-RBAC 1.2 1
18 菜单管理 SYSTEM-RBAC-MENU /rbac/menu/ 1.21 17
19 菜单管理:创建 SYSTEM-RBAC-MENU-CREATE /rbac/menu/create/ 1.211 18
20 菜单管理:修改 SYSTEM-RBAC-MENU-UPDATE /rbac/menu/update/ 1.212 18
21 角色管理 SYSTEM-RBAC-ROLE /rbac/role/ 1.22 17
22 角色管理:列表 SYSTEM-RBAC-ROLE-LIST /rbac/role/list/ 1.221 21
23 角色管理:创建 SYSTEM-RBAC-ROLE-CREATE /rbac/role/create/ 1.222 21
24 角色管理:修改 SYSTEM-RBAC-ROLE-UPDATE /rbac/role/update/ 1.223 21
25 角色管理:删除 SYSTEM-RBAC-ROLE-DELETE /rbac/role/delete/ 1.224 21
26 角色管理:关联菜单 SYSTEM-RBAC-ROLE-ROLE2MENU /rbac/role/role2menu/ 1.225 21
27 角色管理:菜单列表 SYSTEM-RBAC-ROLE-ROLE2MENU_LIST /rbac/role/role2menu_list/ 1.226 21
28 角色管理:关联用户 SYSTEM-RBAC-ROLE-ROLE2USER /rbac/role/role2user/ 1.227 21
以上是有关用户添加、角色管理、菜单管理等比较高级的权限,若想添加其他页面(菜单),需按照以下规则添加:
# 添加顶级(一级、最外层菜单),这里指的是:系统管理、权限管理、后台管理:
# 使用 app 名称命名
path('rbac/', include('rbac.urls', namespace='rbac')),
# 从左至右分别表示,id、名称、图标(顶级最好有图标)、代码、编号,父菜单(这里一律是 1,即 **系统**,无 URL
17 权限管理 fa fa-user-plus SYSTEM-RBAC 1.2 1
# 二级菜单,分组:角色管理、菜单管理
path('rbac/menu/', views_menu.MenuListView.as_view(), name='rbac-menu'),
path('rbac/role/', views_role.RoleView.as_view(), name='rbac-role'),
18 菜单管理 SYSTEM-RBAC-MENU /rbac/menu/ 1.21 17
21 角色管理 SYSTEM-RBAC-ROLE /rbac/role/ 1.22 17
# 三级菜单,功能菜单,具体的操作、功能
path('rbac/role/create/', views_role.RoleCreateView.as_view(), name='rbac-role-create'),
path('rbac/role/list/', views_role.RoleListView.as_view(), name='rbac-role-list'),
path('rbac/role/update/', views_role.RoleUpdateView.as_view(), name='rbac-role-update'),
path('rbac/role/delete/', views_role.RoleDeleteView.as_view(), name='rbac-role-delete'),
22 角色管理:列表 SYSTEM-RBAC-ROLE-LIST /rbac/role/list/ 1.221 21
菜单编号,用于排序所用。
6、添加中间件
'apps.rbac.middleware.MenuCollection',
'apps.rbac.middleware.RbacMiddleware',
7、项目侧边栏和顶部导航栏添加菜单:
侧边栏 basic-left-sidebar.html
<ul class="sidebar-menu">
<li class="active"><a href="{% url 'system:index' %}"><i class="fa fa-indent">i> <span>首页span>a>li>
<li class="treeview"><a href="{% url 'profile' %}"><i class="fa fa-user-plus">i> <span>个人中心span>a>li>
<li class="treeview">
<a href="#"><i class="fa fa-rouble">i> <span>路由管理span>
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right">
i>
span>
a>
<ul class="treeview-menu">
<li><a href="{% url 'system:route' %}">路由列表a>li>
ul>
li>
{% for menu in request.reveal_menu %}
{% if not menu.url %}
<li class="treeview" id="{{ menu.code }}">
<a href="">
<i class="{{ menu.icon }}">i><span>{{ menu.name }}span>
<span class="pull-right-container"><i class="fa fa-angle-left pull-right">i>
span>
a>
<ul class="treeview-menu">
{% for sub in menu.sub_menu %}
<li id="{{ sub.code }}">
<a href="{{ sub.url }}"><i class="fa fa-caret-right">i>{{ sub.name }}a>
li>
{% endfor %}
ul>
li>
{% else %}
<li id="{{ menu.code }}">
<a href="{{ menu.url }}"><i class="{{ menu.icon }}">i><span>{{ menu.name }}span>
a>
li>
{% endif %}
{% endfor %}
ul>
顶部导航栏 basic-header.html
...
{% for menu in request.top_menu %}
<ul class="nav navbar-nav">
<li {% ifequal menu.status True %}class="active" {% endifequal %}>
<a href="{{ menu.url }}" id="{{ menu.code }}">{{ menu.name | default_if_none:"" }}a>
li>
ul>
{% endfor %}
图标:https://fontawesome.dashgame.com/