人人为我,我为人人!Laravel RBAC 权限管理包,快速搭建后台权限功能~

Laravel Rbac

English
中文

基于角色的权限管理拓展包

本拓展包是基于Laravel Permission的界面化封装,用于快速搭建权限管理后台

本拓展包运行基础环境:

  1. Php >= 7.2
  2. Laravel >= 6.1

临时DEMO
地址:http://202.182.110.252:8435/admin
账号:admin@gmail.com
密码:admin&%@cv..

声明

本文中的 权限 也就是 laravel中的 路由

展示

面板首页


dashboard

用户列表


user list

用户权限分配


user role assignment

菜单构建


menu build

路由列表


menu build

10分钟内在线用户


menu build

背景

造轮子造的很烦,但又找不到完全合适的轮子去用,所以只能自己造了。

Laravel Permission 项目很好用,但是不提供UI。本项目是基于Laravel Permission,在此基础上,加上了UI,努力做到开箱即用。

本拓展包做到的功能:

  1. 基于角色的权限管理,一个用户可以分配多个角色,一个角色可以分配多个权限
  2. 基于当前用户所拥有的权限,动态生成菜单
  3. 一键更新最新权限
  4. 记录用户操作日志,可使用队列异步
  5. 后台界面

安装

推荐使用在Laravel新项目
记得先在php.ini中取消对execshell_execproc*等方法的限制

修改配置文件.env

# change database, and key
# change cache
CACHE_DRIVER=redis
REDIS_CLIENT=predis
# suggest
QUEUE_CONNECTION=redis

在项目根目录运行 composer

$ composer require ohhink/rrm

根目录下运行资源发布,此命令会增加配置文件(admin.php,filesystems.php,permission.php),以及前端资源文件和数据库填充文件

$ php artisan vendor:publish
$ php artisan vendor:publish --tag=seeds --force

根目录下运行数据库迁移填充命令

$ php artisan migrate:refresh --seed

设置文件夹权限和软连接

$ chmod -R 777 storage
$ php artisan storage:link

至此,安装完毕

使用说明

  • 后台默认路径 /admin , 此路径可以在admin.php中配置
    安装过程中,已经默认创建了一个超级管理员admin

    账号 : admin@gmail.com
    密码 : admin&%@cv..
    
  • RBAC 的理念是,将权限赋予给角色,将角色赋予给用户。一个角色可以有多个权限,一个用户可以有多个角色。
    所以使用以下步骤加入你的业务逻辑

    1. 编写好你的业务逻辑路由
    2. 通过路由检测功能,获取最新的权限,例如test
    3. resources/vendor/rrm/zh-cn/permission.php 中创建对应的翻译数据,若无此文件,可以自行创建此路径下的 permission.php。例如将 test 翻译为 测试功能
    4. 给对应的角色分配该路由,例如给admin用户分配测试功能
    5. 如果此功能为菜单功能,需要新增菜单,并重新调整菜单布局
  • 如果你想重写路由,请将以下代码加入文件route/web.php

    # this is rewrite the route to your app/Http/Controllers/IndexController.php index()
    
    Route::prefix(config('admin.prefix'))->middleware([
        'auth',
        'admin'
    ])->name('admin.')->group(function () {
        Route::get('/', 'IndexController@index')->name('index');
    });
    

    在你的 app/Http/Controllers/IndexController.php 控制器中,你应该这样写

    
    public function index()
    {
        // put your code here !!!
    
        return parent::index();
    }
    
  • 为了使用右侧菜单上的在线用户功能,你需要在文件app/Console.Kernel.php中增加命令,如下

    protected function schedule(Schedule $schedule)
    {
        // $schedule->command('inspire')
        //          ->hourly();
        $schedule->command('admin-tool:cache-online-users')->everyMinute();
    }
    

    同时,需要在服务器定时任务中,加入如下配置

    * * * * * php /home/vagrant/blade_package/artisan schedule:run >> /dev/null 2>&1
    
  • 因为本项目自带日志记录,用户的每一步操作都会记录下来。为了避免响应过慢的问题,可以开启异步记录,提升响应速度。
    想要修改为异步,只需要将 .env 文件中的 QUEUE_CONNECTION=sync 修改为 QUEUE_CONNECTION=redis
    当然,要使用redis,前提是已经加入PRedis包或者Redis服务

  • 如果你想修改无权限报错页面(500),你可以创建 resource/views/vendor/rrm/500.blade.php 文件来重写它

  • 监听队列命令

    php artisan queue:work --queue=logs --sleep=3 --tries=3
    
    # 建议使用supervisor
    # supervisor配置文件 laravel-worker.conf
    
    [program:logs]
    process_name=%(program_name)s_%(process_num)02d
    command=php path_to/artisan queue:work --queue=logs --sleep=3 --tries=3
    autostart=true
    autorestart=true
    user=root
    numprocs=2
    redirect_stderr=true
    stdout_logfile=path_to/supervisor/logs.log
    
    保存之后,运行 supervisorctl reload 加载配置
    

相关仓库

维护者

@OhhInk.

如何贡献

非常欢迎你的加入! 有任何问题或者想要贡献代码,请提交 issue

使用许可

MIT © OhhInk

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270