当前位置: 首页 > news >正文

Laravel 权限控制新选择:使用 Laravel-authz 集成 PHP-Casbin

在这里插入图片描述
在 Laravel 项目开发中,权限管理是保证应用安全的关键环节。虽然 Laravel 自带了 Gate 和 Policy 授权机制,但在面对复杂权限需求时往往力不从心。今天介绍的是基于 Casbin 的 Laravel-authz 库,它能帮助你在 Laravel 项目中实现 RBAC(基于角色的访问控制)、ABAC(基于属性的访问控制)等高级权限模型。

什么是Casbin和Laravel-authz?

PHP-Casbin 是一个强大的、支持多种访问控制模型的开源授权库,它支持ACL、RBAC、ABAC等多种访问控制模型。

Laravel-authz 是专门为 Laravel 框架定制的Casbin扩展包,提供了无缝集成体验。

通过 Laravel-authz,你可以轻松管理用户权限、角色和资源关系,实现灵活且精细化的权限控制。

安装与配置

1. 安装包

使用 Composer 安装 Laravel-authz:

composer require casbin/laravel-authz

包安装后,ServiceProvider 和 Facade 会自动注册。

2. 发布配置和迁移

运行以下命令发布配置文件和执行数据库迁移:

php artisan vendor:publish
php artisan migrate

这将创建配置文件(config/lauthz.phpconfig/lauthz-rbac-model.conf)以及数据库表。

基本使用

管理权限和角色

使用Enforcer门面可以轻松管理权限和角色:

use Enforcer;// 给用户添加权限
Enforcer::addPermissionForUser('eve', 'articles', 'read');// 给用户添加角色
Enforcer::addRoleForUser('eve', 'writer');// 给角色添加权限
Enforcer::addPolicy('writer', 'articles', 'edit');

检查权限

在代码中检查用户权限很简单:

if (Enforcer::enforce("eve", "articles", "edit")) {// 允许编辑文章
} else {// 拒绝请求,显示错误
}

使用中间件保护路由

Laravel-authz 提供了中间件来保护路由:

// 在app/Http/Kernel.php中注册中间件
protected $routeMiddleware = [// ...'enforcer' => \Lauthz\Middlewares\EnforcerMiddleware::class,'http_request' => \Lauthz\Middlewares\RequestMiddleware::class,
];

保护路由:

Route::group(['middleware' => ['enforcer:articles,read']], function () {// 需要文章读取权限的路由
});

对于 RESTful 资源,可以使用 RequestMiddleware:

Route::group(['middleware' => ['http_request']], function () {Route::resource('photo', 'PhotoController');
});

深度集成Laravel原生Auth系统

为了更好融入Laravel生态,可以深度集成 Casbin 到原生 Auth 系统。

1. 扩展用户提供器

// 在AuthServiceProvider中
Auth::provider('casbin', function($app, array $config) {return new class($app['hash'], $config['model']) extends EloquentUserProvider {public function retrieveById($identifier) {$user = parent::retrieveById($identifier);// 注入Casbin角色$user->setAttribute('roles', Enforcer::getRolesForUser('user:'.$identifier));return $user;}};
});

2. 配置自定义驱动

config/auth.php中:

'providers' => ['users' => ['driver' => 'casbin','model' => App\Models\User::class,],
]

3. 重写Gate行为

开发者可以使用 Laravel 的 Gates 检查一个用的权限:

$user->can('articles,read');
// For multiple enforcers
$user->can('articles,read', 'second');
// The methods cant, cannot, canAny, etc. also work

高级功能

多实例支持

Laravel-authz 支持配置多个权限控制实例:

// config/lauthz.php
return ['default' => 'basic','basic' => ['model' => [/*...*/],'adapter' => Lauthz\Adapters\DatabaseAdapter::class,],'second' => ['model' => [/*...*/],],
];// 使用特定实例
Enforcer::guard('second')->enforce("eve", "articles", "edit");

缓存优化

为了提高性能,可以启用策略缓存:

// config/lauthz.php
'cache' => ['enabled' => true,'store' => 'default','key' => 'rules','ttl' => 24 * 60,
]

Artisan命令

Laravel-authz 提供了方便的Artisan命令:

# 给用户添加策略
php artisan policy:add eve,articles,read# 给角色添加策略
php artisan policy:add writer,articles,edit# 给用户赋予角色
php artisan role:assign eve writer

性能优化建议

在生产环境中,可以考虑以下优化措施:

  1. 使用策略缓存中间件预加载策略
  2. 实现批量检查优化减少数据库查询
  3. 监控缓存命中率和平均鉴权耗时
  4. 设置灾备方案防止单点故障

总结

Laravel-authz 为 Laravel 项目提供了强大而灵活的权限控制解决方案。通过它可以轻松实现:

  • 多种访问控制模型:支持 ACL、RBAC、ABAC 等模型
  • 无缝集成:与 Laravel 原生 Auth 系统深度整合
  • 高性能:支持缓存和多种优化策略
  • 易于使用:提供友好的 API 和 Artisan 命令

无论你是构建小型项目还是复杂企业应用,Laravel-authz 都能提供可靠的权限管理支持。尝试一下这个强大的工具,让你的 Laravel 应用更加安全可靠!

更多详细信息和高级用法,可以参考 https://github.com/php-casbin/laravel-authz。


文章转载自:

http://plLHcjsg.ndfwh.cn
http://YFu2bMby.ndfwh.cn
http://fpY2Gs0I.ndfwh.cn
http://OEz4NoLd.ndfwh.cn
http://tq01B5pq.ndfwh.cn
http://78NR3yU1.ndfwh.cn
http://hr1extmT.ndfwh.cn
http://tW68B1a5.ndfwh.cn
http://azMd9JQN.ndfwh.cn
http://naA59MXp.ndfwh.cn
http://tWKlOySj.ndfwh.cn
http://iUdw5eSN.ndfwh.cn
http://xaAvizyy.ndfwh.cn
http://IgQCCUhP.ndfwh.cn
http://1yTiqBDs.ndfwh.cn
http://zm5dLzwc.ndfwh.cn
http://2MYu6J4H.ndfwh.cn
http://S728TFbC.ndfwh.cn
http://bwmcn3Pp.ndfwh.cn
http://JqSsOOjx.ndfwh.cn
http://gI63aIXY.ndfwh.cn
http://FywnJSJM.ndfwh.cn
http://AAHJb2ZA.ndfwh.cn
http://mE9pMK0N.ndfwh.cn
http://BhfCqkMM.ndfwh.cn
http://FuoHLfgz.ndfwh.cn
http://rdAaiqQC.ndfwh.cn
http://ggfqbFVf.ndfwh.cn
http://MIixGxkZ.ndfwh.cn
http://7SKpS2ul.ndfwh.cn
http://www.dtcms.com/a/363209.html

相关文章:

  • IEEE 802.11 MAC架构解析:DCF与HCF如何塑造现代Wi-Fi网络?
  • 从实操到原理:一文搞懂 Docker、Tomcat 与 k8s 的关系(附踩坑指南 + 段子解疑)
  • 避坑指南!解决Navicat运行SQL成功但没有表的问题
  • 当AI“读懂”你的心:NLP如何让机器拥有真正的“语言智能”?
  • 最大熵强化学习相比传统强化学习,有什么缺点?
  • 固定资产管理系统(蓝牙标签打印+移动端Java+Vue+Uniapp源码)
  • 美团龙猫(longcat.AI)编写的利用二分查找优化Excel的sheet.xml指定范围输出C程序
  • 华清远见25072班I/O学习day3
  • 安装部署k3s
  • MySQL 8.0 窗口函数详解:让数据分析更简单高效
  • 核心理念:用“图像序列 + 光流插帧”降低硬件需求
  • UNet改进(37):AxialDynamicConv2D原理剖析与实战应用
  • GoLand IDE 无法识别 Go 工作区中的引用,如何解决?
  • 解决方法:QT打开正常的以前旧版本项目运行却报错的原因和解决方法
  • 猫头虎AI分享:无需OCR,基于ColQwen2、Qwen2.5和Weaviate对PDF进行多模态RAG的解决方案
  • Suno AI 新功能上线:照片也能唱歌啦!
  • 【GPT入门】第64课 Ilamaindex初步认识与llm幻觉解决方法
  • 高效对象属性复制工具
  • WEWA、VLA、世界模型,辅助驾驶进入GPT时代
  • 使用 Gulp + Webpack 打造一个完整的 TypeScript 库构建流程
  • STL库——deque/priority_queue
  • Mysql安全之 TDE ,列加密,审计日志
  • SpringCloud(6)-优雅实现远程调用-OpenFeign
  • 基于springboot的“衣依”服装销售平台
  • git通过https和SSH上传gitee仓库
  • MongoDb(①免安装)
  • ​​​​​​​Blender 重拓扑修改器实战指南:从基础操作到细节优化​
  • Meta AIUCSD放大招:DeepConf 让大语言模型推理既快又准,84.7%的token节省+近乎完美的准确率!
  • WMT2014:机器翻译领域的“奥林匹克盛会“
  • 大模型RAG项目实战:RAG技术原理及核心架构