动态菜单/RBAC标准完整权限管理系统的实现,通用角色权限控制系统五张表逻辑关联设计实现

本文介绍了如何实现一个基于RBAC(Role-Based Access Control)的权限管理系统,包括用户表、角色表、菜单表、用户角色表和角色菜单表的设计。通过用户登录验证,获取用户角色及权限,实现动态菜单的功能。详细阐述了各表结构及登录验证流程,并提到了扩展部门和职位权限的方式。此外,还分享了系统部分页面截图和源码的获取方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

序言:

众所周知,RBAC(Role-Based Access Control,基于角色的访问控制)权限系统是每个系统里面必备的最基本的系统,然而权限系统设计有时挺麻烦的,现在整理了下,给正在开发此模块的朋友一个思路!

  设计基础:用户、角色、权限三大核心表,加上用户角色、角色权限两个映射表(用于给用户表关联上权限表)。这样就可以通过登录的用户来获取权限列表,或判断是否拥有某个权限。

  大致用到5张表:用户表(s_user)、角色表(s_role)、菜单表(s_menu)、用户角色表(s_user_role)、角色菜单表(s_role_menu)<注:表前加前缀s代表这些是系统表,表名划分业务范畴,mysql中命名尽量全部采用小写,mysql在windows下是不区分大小写的,但是在linux下严格区分的,而且java或者mybatis这些持久层操作都是严格区分大小写的,为了不至于混乱。建议全小写或全大写,如果是sql server则建议驼峰命名方式比如:s_UserRole(我个人也比较喜欢这种)>。

各表的大体表结构如下:

  •   1、用户表(s_user):user_id,user_name、pwd,state,user_type
  •   2、角色表(s_role):role_id,role_name,description
  •   3、菜单表(s_menu):menu_id,menu_pid,sort,menu_name,func_name,is_enabled,description
  •   4、用户角色表(s_user_role):urid、user_id、role_id
  •   5、角色菜单表(s_role_menu):rmid、role_id、menu_id

任何权限的需求,都是为广义的用户分配角色,角色拥有广义的权限。角色是最重要的中枢,隐藏做幕后黑手,从不出现在业务代码里,用行话说就是解除了用户和权限的直接耦合。

角色把用户群体抽象化,几百个用户变成几个特殊定义的角色,用户->角色->权限写成通用判断权限的方法:currUser.IsHave(xx权限)。核心就是一个sql联表查询语句,查询条件为用户id。

例如:
部门权限:部门也是一种角色,建立 部门表、部门角色表。通用权限方法里加上 当前部门->部门所属角色->权限 
职位权限:职位也是一种角色,

好的,我可以为您解答关于基于 Laravel 9 实现权限操作的问题。 首先,Laravel 9 提供了非常便捷的认证和授权功能,可以通过它们来实现权限操作。下面是一些基本的步骤: 1. 安装 Laravel 9 您需要先安装 Laravel 9,可以通过 Composer 进行安装。执行以下命令来安装 Laravel 9: ``` composer create-project --prefer-dist laravel/laravel myproject "9.*" ``` 2. 配置数据库连接 在 `.env` 文件中配置您的数据库连接信息: ``` DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=your_database_name DB_USERNAME=your_database_username DB_PASSWORD=your_database_password ``` 3. 创建用户/角色/菜单/权限/部门 您需要创建以下格来存储用户/角色/菜单/权限/部门信息: - users :存储用户信息 - roles :存储角色信息 - menus :存储菜单信息 - permissions :存储权限信息 - departments :存储部门信息 您可以使用 Laravel 的迁移工具来创建这些格。执行以下命令生成迁移文件: ``` php artisan make:migration create_users_table --create=users php artisan make:migration create_roles_table --create=roles php artisan make:migration create_menus_table --create=menus php artisan make:migration create_permissions_table --create=permissions php artisan make:migration create_departments_table --create=departments ``` 然后您需要在这些迁移文件中定义格的字段和关联关系,再执行以下命令来创建格: ``` php artisan migrate ``` 4. 创建模型 在 `app` 目录下创建以下模型: - User 模型:对应 users - Role 模型:对应 roles - Menu 模型:对应 menus - Permission 模型:对应 permissions - Department 模型:对应 departments 在每个模型中定义与其他模型的关联关系,例如 User 模型中可以定义与 Role 模型的关联关系: ``` class User extends Authenticatable { public function roles() { return $this->belongsToMany(Role::class); } } ``` 5. 创建控制器 您需要创建以下控制器: - UserController:用于处理用户相关的请求 - RoleController:用于处理角色相关的请求 - MenuController:用于处理菜单相关的请求 - PermissionController:用于处理权限相关的请求 - DepartmentController:用于处理部门相关的请求 在每个控制器中定义对应的方法,例如 UserController 中可以定义 show 方法: ``` class UserController extends Controller { public function show($id) { $user = User::findOrFail($id); return view('user.show', ['user' => $user]); } } ``` 6. 创建路由 在 `routes/web.php` 文件中定义相关的路由,例如: ``` Route::get('user/{id}', [UserController::class, 'show']); Route::get('role/{id}', [RoleController::class, 'show']); Route::get('menu/{id}', [MenuController::class, 'show']); Route::get('permission/{id}', [PermissionController::class, 'show']); Route::get('department/{id}', [DepartmentController::class, 'show']); ``` 7. 创建视图 最后,您需要创建对应的视图文件,例如: - user/show.blade.php:用于展示用户信息 - role/show.blade.php:用于展示角色信息 - menu/show.blade.php:用于展示菜单信息 - permission/show.blade.php:用于展示权限信息 - department/show.blade.php:用于展示部门信息 在视图文件中展示对应的信息,例如在 user/show.blade.php 文件中展示用户信息: ``` <h1>{{ $user->name }}</h1> <p>{{ $user->email }}</p> ``` 以上是基于 Laravel 9 实现权限操作的基本步骤,您可以根据自己的需求进行扩展和修改。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值