sonphvl / authorization
一个通过 Gate 实现基于角色和权限授权的包
v1.1.1
2024-01-27 09:34 UTC
This package is auto-updated.
Last update: 2024-09-27 12:06:51 UTC
README
此包提供了一个基于 Laravel Gate 的简单授权实现。
实现
1. 安装包
此命令将安装包
composer require sonphvl/authorization
此包需要发布迁移,如果迁移没有自动发布,请运行以下命令
php artisan vendor:publish --tag=authorization-migrations php artisan migrate
2. 发布资源(可选)
如果您想发布资源进行编辑,请运行以下命令
php artisan vendor:publish --tag=authorization-middleware php artisan vendor:publish --tag=authorization-config
3. 注册服务提供者
打开 config/app.php 并将您的服务提供者添加到 providers 数组中。
'providers' => [ // Other Package Service Providers... Sonphvl\Authorization\AuthorizationServiceProvider::class, //Application Service Providers ],
4. 应用 Authorizable 特性
将 Authorizable 特性添加到您的 Authenticatable 模型中,例如 User 模型
namespace App\Models; // Others imported classes use Sonphvl\Authorization\Traits\Authorizable; //Add this line class User extends Authenticatable { use Authorizable; //Add this line //Your model content }
5. 管理角色和权限
您可以在 "/authorization" 处映射角色和权限
route('authorization.index')
6. 应用
安装包后,将自动注册名为 "authorize" 的中间件别名。
关于 Authorize 中间件
当您应用中间件时,默认的权限名称是路由前缀、控制器名称前缀和操作名称的小写拼接。例如,考虑以下路由
Route::prefix('admin')->group(function () { Route::get('/users', [UserController::class, 'index']); });
在上面的示例路由中,包将调用以下
$controller->authorize('admin-user-index');
要自定义控制器名称前缀,在您的控制器中添加此行
public $authorizePrefix = 'alternative';
通过这种方式,包将调用以下
$controller->authorize('admin-alternative-index');
应用于中间件组
要将 "authorize" 中间件应用于中间件组,请将以下内容添加到您的 .env 文件中
AUTHORIZATION_MIDDLEWARE_GROUPS=web,api
当注册中间件组时,将以下内容添加到您的控制器中以忽略任何函数
public $ignoredAutoAuthorize = ['index']; //To ignore index function from authorization
应用于路由
对单个路由应用
Route::get('/users', [UserController::class, 'index'])->middleware(['authorize']);
对多个路由应用
Route::middleware(['authorize'])->group(function () { Route::get('/', function () { // Uses first & second middleware... }); Route::get('/user/profile', function () { // Uses first & second middleware... }); });
手动应用于特定函数
要授权一个函数,在您的控制器函数顶部添加此行
class UserController extends Controller { public function index() { $this->authorize('permission-name'); //Add this line //The rest of the function } }
许可协议
此包是开源软件,根据 MIT 许可协议 许可。