第一部分 安裝
該軟件包可用於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');
});