资讯专栏INFORMATION COLUMN

Laravel5.1基于Entrust扩展包实现的RBAC权限控制模块(迁移到其他项目中的方法)

li21 / 1020人阅读

摘要:基于扩展包实现的权限控制模块迁移到其他项目中的方法大部分的项目中,都需要权限控制,我们的项目用的是的框架,基于扩展包,写了一个通用的权限控制模块,方便后续其他项目需要时可用直接迁移使用。拷贝权限控制中间件。

Laravel5.1基于Entrust扩展包实现的RBAC权限控制模块(迁移到其他项目中的方法)

大部分的项目中,都需要权限控制,我们的项目用的是Laravel5.1的框架,基于Entrust扩展包,写了一个通用的RBAC权限控制模块,方便后续其他项目需要时可用直接迁移使用。

github地址:https://github.com/NancyLin/l...
项目地址:git@github.com:NancyLin/laravel-rbac.git

注意,如果要把项目下到自己的电脑上测试,修改.env的数据库设置,将storage和bootstrap/cache 目录更改为可读写可执行的权限。

要把RBAC模块迁移到自己的项目中方法如下: (1)安装配置Entrust扩展包

具体的安装配置方法请看以下链接,这里不做说明

https://github.com/Zizaco/entrust

(2)安装配置好后,根据我们自己的实际需求,更改相关的数据表字段。
# 用户表增加是否超级管理员
ALTER TABLE `users` ADD COLUMN `is_super` TINYINT(1) NOT NULL DEFAULT 0 COMMENT "是否超级管理员";

# 权限表增加父类菜单显示、
ALTER TABLE `permissions` ADD COLUMN `p_id` INT(10) NOT NULL DEFAULT 0  COMMENT "父类菜单ID" AFTER `id`;
# 权限表增加是否菜单显示
ALTER TABLE `permissions` ADD COLUMN `is_menu` TINYINT(1) NOT NULL DEFAULT 0  COMMENT "是否菜单显示" AFTER `description`;
# 权限表增加是否菜单显示
ALTER TABLE `permissions` ADD COLUMN `sort` TINYINT(4) NOT NULL DEFAULT 0  COMMENT "排序" AFTER `is_menu`;

# 权限表中display_name字段不允许为空
ALTER TABLE `permissions` Modify COLUMN `display_name` VARCHAR(255) NOT NULL DEFAULT ""  COMMENT "显示名称";
# 权限表中description字段不允许为空
ALTER TABLE `permissions` Modify COLUMN `description` VARCHAR(255) NOT NULL DEFAULT ""  COMMENT "描述";
(3)更改配置文件

config/entrust.php,指定相应的 role 和 permission 的 model。

"role" => "AppModelsRole",

"permission" => "AppModelsPermission",

.env, 更改CACHE_DRIVER

CACHE_DRIVER=array
(4)注册权限控制中间件

此份demo中,我们对于需要进行权限控制的控制器都采用中间件方式,需要在 app/Http/Kernel.php 的 $routeMiddleware 中注册中间件。

$routeMiddleware = [
 ....
  //权限中间件
  "permission" => AppHttpMiddlewareAuthPermission::class,
]
(5)在 User 模型中引入EntrustUserTrait

在此demo中,在 appUser.php 中增加以下代码:

use ZizacoEntrustTraitsEntrustUserTrait;

class User extends Model implements AuthenticatableContract, CanResetPasswordContract
{
    ...
    use EntrustUserTrait;
    ...
}
(6)注册相关模块的路由

在appHttproutes.php 中注册相关的路由

Route::group(["middleware" => ["auth"]], function(){
    Route::get("home", "HomeController@index");
    Route::controller("check", "CheckController");
    Route::controller("load", "LoadBaseDataController");

    Route::get("user", "RbacUserController@index");
    Route::controller("user", "RbacUserController");

    Route::get("role", "RbacRoleController@index");
    Route::controller("role", "RbacRoleController");

    Route::get("permission", "RbacPermissionController@index");
    Route::controller("permission", "RbacPermissionController");
});
(7)将RBAC相关模块的代码文件或文件夹对应地拷贝到自己的项目中

具体相关模块文件或文件夹如下:

拷贝 ==appHttpControllersRbac== 下的所有相关模块控制器。

拷贝 ==appHttpControllersAdminController.php== 管理通用控制器,要走权限控制中间件的控制器,都可以继承该类。

拷贝 ==appHttpControllersCheckController.php== 验证数据控制器。

拷贝 ==appHttpControllersLoadBaseDataController.php== 加载基础数据控制器。

拷贝 ==appHttpMiddlewareAuthPermission.php== 权限控制中间件。

拷贝 ==appModelsRole.php== 角色model。

拷贝 ==appModelsPermission.php== 权限model。

拷贝 ==appPresentersRbacPresenter.php== Rbac视图逻辑处理类。

拷贝 ==appRepositoriesRepository.php== 数据model基础逻辑处理类。

拷贝 ==appRepositoriesUserRepository.php== 用户model基础逻辑处理类。

拷贝 ==appRepositoriesRoleRepository.php== 角色model基础逻辑处理类。

拷贝 ==appRepositoriesPermissionRepository.php== 权限model基础逻辑处理类。

拷贝 ==publiccss== 下的所有文件和文件夹,前台使用的插件的一些css文件(有些直接使用插件的官网地址,如果加载太慢,可将其下载到本地项目)。

拷贝 ==publicjs== 下的所有文件和文件夹,前台使用的插件的一些js文件(有些直接使用插件的官网地址,如果加载太慢,可将其下载到本地项目)以及相关模块的js文件。

拷贝 ==resourcesviewsrbac== 文件夹,里面包含相关模块的view模板文件。

拷贝 ==resourcesviewserrors== 文件夹,里面包含相关模块没有权限时跳转的view模板文件。

拷贝 ==resourcesviewslayouts== 文件夹,里面包含相关模块的通用模块的view模板文件。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26100.html

相关文章

  • 人人必备10个 Laravel 4 扩展

    摘要:更多扩展包中有丰富的扩展包来帮你完成几乎任何你想实现的功能。我们不能把所有的扩展包都整理出来,然而,这里还是列出了一些很有用的。总之,你几乎总是能够找到一个扩展包可以解决你当前的问题。 Laravel 是一个非常流行且简单易用的PHP框架,它提供了很多基础的工具(如 RESTful 路由、内置的ORM、模版等)使你能够快速的创建应用。这意味着你可以花费更少的时间来建立应用程序的模版,给...

    darkbug 评论0 收藏0
  • laravel package收集

    摘要:查找保存下载用搭建自己的缓存仓库权限管理的好选择基于封装的后台管理系统,支持手机和端访问支付宝风格的验证器后台系统微信接口的部署脚本开发的博客系统百度推送自动记录用户行为扩展一个项目管理系统根据生成对应导航的状态 1.debug https://github.com/barryvdh/l... showImg(https://segmentfault.com/img/bVmhWL); ...

    psychola 评论0 收藏0
  • RBAC-基于角色权限管理

    摘要:基于角色的权限管理权限管理,基于角色的访问控制,就是用户通过角色与权限进行关联。这样,就构造成用户角色权限的授权模型。角色可以理解为一定数量的权限的集合,权限的载体。版主可管理版内的帖子可管理版内的用户等,这些是权限。 RBAC-基于角色的权限管理 RBAC权限管理 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简...

    dingding199389 评论0 收藏0
  • Think-Casbin:一个专为ThinkPHP打造轻量级访问控制库,支持RBAC/ACL等权限

    摘要:是一个用语言打造的轻量级开源访问控制框架,目前在开源。采用了元模型的设计思想,支持多种经典的访问控制方案,如基于角色的访问控制基于属性的访问控制等。一个专为定制的的扩展包。 PHP-Casbin 是一个用 PHP 语言打造的轻量级开源访问控制框架( https://github.com/php-casbin... ),目前在 GitHub 开源。PHP-Casbin 采用了元模型的设计...

    lieeps 评论0 收藏0
  • RBAC权限模型初步理解

    摘要:近来部门接到一个外包项目,是基于现有的系统做一个知识文档库,类似于百度网盘一样的功能,只是在角色和权限上与网盘不同,这个项目我们部门称为,,难点就在于文件的权限管理。   近来部门接到一个外包项目,是基于现有的系统做一个知识文档库,类似于百度网盘一样的功能,只是在角色和权限上与网盘不同,这个项目我们部门称为KM,Knowledge Manager ,难点就在于文件的权限管理。   以下...

    2shou 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<