Laravel的权限管理(RBAC)
来源:互联网 发布:朴素贝叶斯算法实例 编辑:程序博客网 时间:2024/05/21 11:25
1、安装Entrust
通过composer安装扩展包 :composer require zizaco/entrust 5.2.x-dev
安装完成后需要在config/app.php中注册服务提供者到providers数组:
Zizaco\Entrust\EntrustServiceProvider::class,
同时在该配置文件中注册相应门面到aliases数组:
'Entrust' => Zizaco\Entrust\EntrustFacade::class,
如果使用中间件需要添加如下代码到app/Http/Kernel.php的routeMiddleware数组:
'role' => \Zizaco\Entrust\Middleware\EntrustRole::class,
'permission' => \Zizaco\Entrust\Middleware\EntrustPermission::class,
'ability' => \Zizaco\Entrust\Middleware\EntrustAbility::class,
2、配置
在配置文件config/auth.php中设置合适的值,Entrust会使用这些配置值来选择相应的用户表和模型类。
php artisan vendor:publish
该命令会在config目录下创建一个entrust.php文件。
3、用户角色权限表
使用Entrust提供的迁移命令生成迁移文件:
php artisan entrust:migration
然后通过以下命令生成相应的数据表:
php artisan migrate
最终会生成4张新表:
roles—— 存储角色
permissions—— 存储权限
role_user—— 存储角色与用户之间的多对多关系
permission_role—— 存储角色与权限之间的多对多关系
4、模型类
Role
我们需要创建Role模型类app/Models/Role.php并编辑其内容如下:
use Zizaco\Entrust\EntrustRole;class Role extends EntrustRole{}
Permission
接下来创建Permission模型app/models/Permission.php并编辑其内容如下:
use Zizaco\Entrust\EntrustPermission;class Permission extends EntrustPermission{ }
User
接下来我们在User模型中使用EntrustUserTrait:
use Illuminate\Notifications\Notifiable;use Illuminate\Foundation\Auth\User as Authenticatable;use Zizaco\Entrust\Traits\EntrustUserTrait;use Illuminate\Database\Eloquent\Model; class User extends Authenticatable{ use EntrustUserTrait { EntrustUserTrait::can as hasPermission; } }
5.创建角色/权限并进行分配
/** * 添加角色 */ public function add_role() { $role=new Role(); $role->name='admin'; $role->display_name='超级管理员'; $role->description=''; $role->save(); } /** * 给用户分配角色 */ public function send_role() { $user = User::where('id', '=', '1')->first(); //分配一个用户 $user->attachRole(1); //将角色id为1的分配给用户 //分配多个角色 $user->attachRoles() //括号里放数组 } /** * 添加权限 */ public function add_permission() { $createPost = new Permission(); $createPost->name = 'login'; $createPost->display_name = '登录'; $createPost->description = ''; $createPost->save(); } /** * 分配权限 */ public function send_permission() { //查询角色id为5的 $role = Role::where(['id'=>1])->first(); //分配单个权限 $role->attachPermission(1); //分配多个权限 $role->attachPermission(array(1,2,3)); }
6、检查角色&权限
//检查用户是否有admin的角色,成功返回true否则false $user->hasRole('admin'); //检查用户是否有login的权限,成功返回true否则false,一下两者皆可 $user->can("login"); $user->hasPermission('login');
7.用中间件验证用户是否有当前路由的权限
namespace App\Http\Middleware;use Closure;use App\Http\Models\Admin;class RbacMiddleware{ /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { $uid=\Session::get('admin_id'); $user=Admin::where(['id'=>$uid])->first(); //获取当前访问的路由 $uri = $request->path(); if($uri!='admin/index' && $user->hasPermission($uri)==false){ return redirect('admin/index'); } return $next($request); }
- Laravel的权限管理(RBAC)
- Laravel 实现简单Rbac 权限管理
- RBAC权限管理 的研究
- Thinkphp的RBAC权限管理
- RBAC权限管理的解释
- 基于角色的权限管理数据库设计(RBAC)
- 基于角色的权限管理数据库设计(RBAC)
- Grails构建基于RBAC的权限管理平台(一)
- Grails构建基于RBAC的权限管理平台(二)
- 基于角色的访问控制 (RBAC)权限管理
- RBAC基于角色的访问控制模型(权限管理)
- RBAC权限管理(基于角色的访问控制)
- 基于角色管理(RBAC)的权限系统
- 基于角色管理(RBAC)的权限系统
- 基于角色管理(RBAC)的权限系统
- 基于角色管理(RBAC)的权限系统
- 基于RBAC的权限管理系统
- RBAC权限管理系统的设计
- Postgresql锁表的现象
- JVM(6)类加载器
- 分布式一致性算法(五)分布式事务的实现方案:2PC之XA/JTS
- javaBean定义理解什么是JavaBean
- sublime text 3编辑器的一点小技巧
- Laravel的权限管理(RBAC)
- kotlin拓展属性和官方文档中的拓展
- CentOS 7.3搭建LAMP环境和Wordpress
- Maven 三种archetype说明
- Java: Struts2+Hibernate整合应用
- 瞄准大鱼号这八种收益,让你轻松月入过万
- eclipse快捷键
- 程序员业余时间修炼指南
- oracle 11.2.0.1 for windows server2008r2告警ORA-03137