第一部分 安裝
該軟體包可用於Laravel 5.4 或更高版本。 如果您使用的是舊版本的 Laravel ,請檢視該軟體包的 v1 分支。
第一步:
通過 composer 安裝軟體包:
composer require spatie/laravel-permission
(可選項)
在 Laravel 5.5 中,服務提供商將自動獲得註冊。 在舊版本的框架中,只需在 config/app.php 檔案中新增服務提供者即可:
<?php
`providers` => [
// other code
SpatiePermissionPermissionServiceProvider::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)”模型,你也可以使用任何你喜歡的模型。
*
* 您使用的許可權模型必須實現
* `SpatiePermissionContractsPermission` 契約。
*/
`permission` => SpatiePermissionModelsPermission::class,
/*
* 當使用這個包中的 “HasRoles” 特性時,
* 我們需要知道應該使用哪個 Eloquent 模型來檢索你的角色。
* 當然,它通常只是 “角色(Role)” 模型,你也可以使用任何你喜歡的模型。
*
* 您使用的許可權模型必須實現
* `SpatiePermissionContractsRole` 契約。
*/
`role` => SpatiePermissionModelsRole::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 IlluminateFoundationAuthUser as Authenticatable;
use SpatiePermissionTraitsHasRoles;
class User extends Authenticatable
{
use Notifiable, HasRoles;
// other code
}
第六步.
使用中介軟體,分配許可權和角色來保護使用者:`
此軟體包附帶 RoleMiddleware 和 PermissionMiddleware 中介軟體。 直接將它們新增到 app/Http/Kernel.php 檔案中。
<?php
protected $routeMiddleware = [
// other code
`role` => SpatiePermissionMiddlewaresRoleMiddleware::class,
`permission` => SpatiePermissionMiddlewaresPermissionMiddleware::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`); });