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">
    <!-- Optionally, you can add icons to the links -->
    <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 %}
            <!--如果菜单没有url则这个二级菜单是一个菜单组,样式设置为treeview-->
            <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 %}
            <!-- 如果二级菜单有URL,则这是一个功能菜单,直接作为导航菜单,不再添加折叠样式 -->
            <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

 <!-- <nav class="navbar navbar-static-top" role="navigation"> -->
 ...

{% 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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风老魔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值