91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

laravel-permission角色權限控制的示例

發布時間:2021-01-29 14:51:13 來源:億速云 閱讀:333 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關laravel-permission角色權限控制的示例的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

首先還是貼出GitHub的地址

https://github.com/spatie/laravel-permission

然后說一下使用心得

先說數據庫的表結構把一共有6張表,也可以根據可以喜好添加,修改刪除表,不過我們還是先列出表!

首先是用戶表(users)不用說了都是一些基本信息包括名字,郵箱什么的!

權限表(permissions)權限表就是存放所有權限的一張表,權限可以是控制器訪問權限,接口訪問權限,model訪問權限,在這里我們只討論接口訪問權限!

角色表(roles)角色表就是存放你所有的角色,角色的名字為索引!

基本的表有了,那他們是怎么關聯的呢?請繼續往下看!

用戶擁有權限表(model_has_permissions)這張表記錄的就是user_id,permission_id的多對多的關系表,用戶直接獲取權限。

用戶擁有角色表(model_has_roles)這張表記錄的用戶擁有的權限,表里有user_id,role_id這個也是記錄用戶和角色多對多的關系表,也可以理解為中間表!

角色擁有權限表(role_has_permissions)這張表記錄的是角色擁有哪些權限,表里就2個字段role_id,permission_id!也可以根據需要進行拓展!

下面給出一張圖,來直觀的看下各個關聯關系:

laravel-permission角色權限控制的示例

用戶直接擁有權限,model_has_permissions,用戶擁有角色那么就是model_has_role然后到roles表中role_has_permission

如何添加角色(依賴包提供了方法)
$role = Role::Create(['name' => 'add_title']);

Create有幾個參數呢?原方法中有一個name和guard_name,如下面代碼

use Spatie\Permission\Models\Role;
public static function create(array $attributes = [])
{
    $attributes['guard_name'] = $attributes['guard_name'] ?? config('auth.defaults.guard');

    if (static::where('name', $attributes['name'])->where('guard_name', $attributes['guard_name'])->first()) {
        throw RoleAlreadyExists::create($attributes['name'], $attributes['guard_name']);
    }

    if (isNotLumen() && app()::VERSION < '5.4') {
        return parent::create($attributes);
    }

    return static::query()->create($attributes);
}

我們也可以不用這個方法,去調用它原有的task也可以,比如項目初始化自帶的seeder中就調用task

namespace App\Containers\Authorization\Data\Seeders;
Apiato::call('Authorization@CreateRoleTask', ['admin', 'Administrator', 'Administrator Role', 999,'admin']);

跟著命名空間地址去找就能找到seeder、這個task也在Authorization下面Task里面、可以自己修改Task來符合自己的需求!

如何添加權限(依賴包也提供了方法)
$ permission  =  Permission :: create([ ' name '  =>  ' edit articles ' ]);

跟role一樣也可以找到一個寫好的Task以及它的create方法!在這里就不過多說了!

如何直接給用戶添加權限,刪除權限,判斷是否有權限
//可以授予任何用戶權限:
$ user - > givePermissionTo(' edit articles ');

//你也可以一次給多個權限
$ user - > givePermissionTo( ' edit articles ', ' delete articles ');

//你也可以傳遞數組
$ user - > givePermissionTo([ ' edit articles ', ' delete articles ' ]);
//權限可以從用戶撤銷:
$ user - > revokePermissionTo(' edit articles ');
//或者一次性撤消并添加新的權限:
$ user - > syncPermissions([ ' edit articles ',' delete articles ' ]);
//您可以測試用戶是否有權限:
$ user - > hasPermissionTo(' edit articles ');
//測試用戶有多個權限:
$ user - > hasAnyPermission([ ' edit articles ',' publish articles ',' unpublish articles ' ]);
//您可以使用Laravel的默認can功能測試用戶是否具有權限:
$ user - > can(' edit articles ');
如何通過角色使用權限
//角色可以分配給任何用戶:
$ user - > assignRole(' writer ');

//你也可以一次賦值多個角色
$ user - > assignRole( ' writer ', ' admin ');
//或者作為一個數組
$ user - > assignRole([ ' writer ', ' admin ' ]);
//角色可以從用戶中刪除:
$ user - > removeRole(' writer ');
//角色也可以同步:
//所有當前角色將被從用戶中刪除,而由傳入的數組取代
$ user - > syncRoles([ ' writer ', ' admin ' ]);
//您可以確定用戶是否具有某個角色:
$ user - > hasRole(' writer ');
//您還可以確定用戶是否有任何給定的角色列表:
$ user - > hasAnyRole(Role :: all());
//您還可以確定用戶是否具有所有給定的角色列表:
$ user - > hasAllRoles(Role :: all());
//assignRole,hasRole,hasAnyRole,hasAllRoles 和removeRole函數可以接受一個字符串,
//一個\Spatie\Permission\Models\Role對象或一個\Illuminate\Support\Collection對象。

//可以給角色一個許可:
$ role - > givePermissionTo(' edit articles ');
//您可以確定角色是否具有某種權限:
$ role - > hasPermissionTo(' edit articles ');
//權限可以從角色中被撤銷:
$ role - > revokePermissionTo(' edit articles ');
//該givePermissionTo和revokePermissionTo函數可以接受字符串或Spatie\Permission\Models\Permission對象。
//權限是從角色自動繼承的。另外,個人權限也可以分配給用戶。例如:
$ role  =  Role :: findByName(' writer '); 
$ role - > givePermissionTo(' edit articles ');
$ user - > assignRole(' writer ');
$ user - > givePermissionTo(' delete articles ');
//在上面的例子中,角色被授予編輯文章的權限,并且該角色被分配給用戶。現在,用戶可以編輯文章并刪除文章。
//“刪除文章”的權限是直接分配給用戶的直接權限。
//當我們調用$user->hasDirectPermission('delete articles')它返回true,
//但false對$user->hasDirectPermission('edit articles')。
//如果為應用程序中的角色和用戶設置權限并希望限制或更改用戶角色的繼承權限(即,僅允許更改用戶的直接權限),則此方法非常有用。
//您可以列出所有這些權限:
//直接權限
$ user - > getDirectPermissions() //或$ user-> permissions;

//從用戶角色繼承的權限
$ user - > getPermissionsViaRoles();

//所有適用于用戶的權限(繼承和直接)
$ user - > getAllPermissions();
//所有這些響應都是Spatie\Permission\Models\Permission對象的集合。
//如果我們按照前面的例子,第一個響應將是一個具有delete article權限的集合,
//第二個響應將是一個具有權限的集合,edit article第三個將包含這兩個集合。
在哪兒做限制,在哪兒使用

首先你可以在action中檢測這個用戶有沒有這項權限!

你還可以在request中使用,當用戶請求一個接口時、系統會去判斷用戶是否擁有通過這個接口的權限和角色!

這個request當然要在接口調用方法的時候注入進去!

下面給出位置

namespace App\Containers\Authorization\UI\API\Requests;
/**
 * Define which Roles and/or Permissions has access to this request.
 *
 * @var  array
 */
protected $access = [
    'permissions' => 'add-permission-byRole',
    'roles'       => '',
];
總結:

laravel有幾個角色權限控制,但是我選擇這個,laravel-permission好搜索、不是因為誰好誰差的!總的來說角色權限就角色表和權限表,然后就是用戶、角色、權限的關系維護!其實也可以不用他自帶的方法!

基本表的關系都是多對多可以使用attach和detch、sync來維護他們之間的關系!

如果自己玩得夠熟悉了,也不需要他的關系表,完全可以自己寫好來實現這一成的關系!

感謝各位的閱讀!關于“laravel-permission角色權限控制的示例”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

榕江县| 津南区| 海晏县| 广南县| 九江县| 章丘市| 濮阳县| 玉山县| 大名县| 高邑县| 溆浦县| 闵行区| 临泽县| 高唐县| 景宁| 咸宁市| 故城县| 理塘县| 双城市| 鹤庆县| 武义县| 始兴县| 岐山县| 离岛区| 常州市| 台前县| 云安县| 松潘县| 边坝县| 武定县| 平武县| 炎陵县| 天门市| 洪洞县| 安国市| 香格里拉县| 大姚县| 星子县| 甘孜| 阳西县| 静海县|