RBAC 权限使用说明

1、将 rbac 组件拷贝到项目

2、添加 urlProject/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/

你可能感兴趣的:(Python,学习笔记,Django,学习笔记,django,python,pycharm)