共计 2732 个字符,预计需要花费 7 分钟才能阅读完成。
第一部分 安装
该软件包可用于 Laravel 5.4 或更高版本。如果您使用的是旧版本的 Laravel,请查看该软件包的 v1 分支。
第一步:通过 composer 安装软件包:composer require spatie/laravel-permission
(可选项)在 Laravel 5.5 中,服务提供商将自动获得注册。在旧版本的框架中,只需在 config/app.php 文件中添加服务提供者即可:
<?php
‘providers’ => [
// other code
Spatie\Permission\PermissionServiceProvider::class,
];
第二步:发布迁移 php artisan vendor:publish –provider=”SpatiePermissionPermissionServiceProvider” –tag=”migrations” 迁移发布成功后,运行迁移来创建角色和权限表:php artisan migrate
第四步:发布配置文件:php artisan vendor:publish –provider=”SpatiePermissionPermissionServiceProvider” –tag=”config” 发布时 config/permission.php 配置文件 包含:
<?php
return [
‘models’ => [
/*
* 当使用这个包中的“HasRoles”特性时,我们需要知道应该
* 使用哪个 Eloquent 模型来获取您的权限。
* 当然,它通常只是“权限(Permission)”模型,你也可以使用任何你喜欢的模型。
*
* 您使用的权限模型必须实现
* `Spatie\Permission\Contracts\Permission` 契约。
*/
‘permission’ => Spatie\Permission\Models\Permission::class,
/*
* 当使用这个包中的“HasRoles”特性时,
* 我们需要知道应该使用哪个 Eloquent 模型来检索你的角色。
* 当然,它通常只是“角色(Role)”模型,你也可以使用任何你喜欢的模型。
*
* 您使用的权限模型必须实现
* `Spatie\Permission\Contracts\Role` 契约。
*/
‘role’ => Spatie\Permission\Models\Role::class,
],
‘table_names’ => [
/*
* 当使用这个包中的“HasRoles”特性时,
* 我们需要知道哪个表应该用来检索你的“角色”。
* 我们选择了一个基本的默认值,但您可以轻松将其更改为您喜欢的。
*/
‘roles’ => ‘roles’,
/*
* 当使用这个包中的“HasRoles”特性时,
* 我们需要知道哪个表应该用来检索你的权限。
* 我们选择了一个基本的默认值,但您可以轻松将其更改为您喜欢的任何表。
*/
‘permissions’ => ‘permissions’,
/*
*
* 当使用这个包中的“HasRoles”特征时,
* 我们需要知道应该使用哪个表来检索你的“模型权限”。
* 我们选择了一个基本的默认值,但您可以轻松将其更改为您喜欢的任何表。
*
*/
‘model_has_permissions’ => ‘model_has_permissions’,
/*
* 当使用这个包中的“HasRoles”特性时,
* 我们需要知道哪个表应该用来检索你的“模型角色”。
* 我们选择了一个基本的默认值,但您可以轻松将其更改为您喜欢的任何表。
*/
‘model_has_roles’ => ‘model_has_roles’,
/*
* 当使用这个包中的“HasRoles”特性时,
* 我们需要知道应该使用哪个表来检索您的“角色权限”。
* 我们选择了一个基本的默认值,但您可以轻松将其更改为您喜欢的任何表。
*/
‘role_has_permissions’ => ‘role_has_permissions’,
],
/*
* 默认情况下,所有权限将被缓存 24 小时,
* 除非更新许可或者更新角色来立即刷新缓存。
*/
‘cache_expiration_time’ => 60 * 24,
/*
* 设置为 true 时,所需的权限 / 角色名称(permission/role)将添加到异常消息中。
* 在某些情况下,这可能被认为是信息泄漏,
* 所以为了获得最佳安全性,默认设置为 false。
*/
‘display_permission_in_exception’ => false,
];
第二部分 开始使用
第五步. 将 SpatiePermissionTraitsHasRoles 特征添加到您的 User 模型中:`
<?php
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use Notifiable, HasRoles;
// other code
}
第六步. 使用中间件,分配权限和角色来保护用户:` 此软件包附带 RoleMiddleware 和 PermissionMiddleware 中间件。直接将它们添加到 app/Http/Kernel.php 文件中。
<?php
protected $routeMiddleware = [
// other code
‘role’ => \Spatie\Permission\Middlewares\RoleMiddleware::class,
‘permission’ => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
];
使用中间件规则保护你的路由:
<?php
Route::group([‘middleware’ => [‘role:super-admin’]], function () {
// route code
});
Route::group([‘middleware’ => [‘permission:publish articles’]], function () {
// route code
});
Route::group([‘middleware’ => [‘role:super-admin’,’permission:publish articles’]], function () {
// route code
});
路由案例
<?php
Route::group([‘middleware’ => [‘role: 编辑 ’]], function ($route) {
$route->get(‘/api/user’, ‘UserController@show’);
});