第一部分 安装
该软件包可用于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');
});
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。