国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【 Laravel 工具包推薦--角色/權(quán)限管理】

xiaoxiaozi / 2279人閱讀

摘要:在大多數(shù)的開發(fā)中,角色和權(quán)限的管理都是非常重要的一部分。上關(guān)于角色和權(quán)限管理的包有很多,今天就為大家介紹幾個(gè)好用的包。緩存在中,為了提高應(yīng)用的性能,或自動(dòng)的存儲(chǔ)角色和權(quán)限數(shù)據(jù)。

在大多數(shù)的web開發(fā)中,角色和權(quán)限的管理都是非常重要的一部分。Laravel上關(guān)于角色和權(quán)限管理的包有很多,今天就為大家介紹幾個(gè)好用的包。比如Entrust等,

我們?yōu)槭裁葱枰谌桨?/b>

首先,Laravel自己本來就已經(jīng)提供了一些管理權(quán)限的基本功能,這些基本的功能在5.1.11版本中就具備了,并且一直保留到現(xiàn)在。常見的方法如下:

Gates 和 Policies

$this->authorize()方法

Blade模版中的@can@cannot命令

也許對于某些人來說,Laravel提供的這些基本的權(quán)限管理功能已經(jīng)足夠了。但是,如果你想要更簡單更方便的管理權(quán)限和角色,那Laravel自帶的權(quán)限管理功能就不太夠用了。下面推薦兩款不錯(cuò)的包:

Laravel-permission

Bouncer

??注意:Github上有這樣一個(gè)包:santigarcor/laratrust,它其實(shí)是Entrust項(xiàng)目中fork出來的一個(gè)新的項(xiàng)目(應(yīng)為Entrust現(xiàn)在已經(jīng)不再維護(hù)了,只支持到Laravel 5),這個(gè)用來管理角色和權(quán)限也是很不錯(cuò)的。但是,Laratrust中已經(jīng)把Laravel中的一些默認(rèn)命令替換掉了,所以在使用的時(shí)候不能使用Gates@can語法,取而代之的是$user->can(‘edit-user’)@permission語法,除了這個(gè)注意點(diǎn)外,Laratrust是一個(gè)很好的項(xiàng)目。此外,值得贊的地方就是Laratrust還具備了適用于團(tuán)隊(duì)開發(fā)的一些功能,而這個(gè)功能在上面兩個(gè)包中是沒有的。

此外,還有一些其他的包,由于項(xiàng)目不太活躍,還有點(diǎn)過時(shí)這里不太推薦,但學(xué)習(xí)一下還是可以的:

Romanbican / roles

Kodeine / Laravel-acl

詳細(xì)說一下最上面推薦的兩個(gè)包

Laravel-permission和Bouncer提供的API讓我們在對角色和權(quán)限管理時(shí)更加簡單,而且在調(diào)用時(shí)代碼也很容易理解。在創(chuàng)建規(guī)則時(shí),Laravel-permission和Bouncer的方式和Laravel的PoliciesGates有所不同:

$user->givePermissionTo("edit articles"); // Laravel-permission
$user->allow("ban-users"); // Bouncer

上面兩個(gè)包,除了語法和數(shù)據(jù)庫的結(jié)構(gòu)略有不同外,其他都是差不多的。

具體的安裝使用

Laravel-permission和Bouncer的安裝方法很相似:

composer.json文件添加配置命令并安裝

config/app.php文件中添加provider 和 facade (Bouncer)

執(zhí)行Publish和migrations命令

向不同的Model中設(shè)置Trait

在做下面的操作前,先要?jiǎng)?chuàng)建一個(gè)用戶表,并且不要給這個(gè)表分配角色和權(quán)限,對于新項(xiàng)目來說就是創(chuàng)建一個(gè)基礎(chǔ)的用戶表。接下來,就可以針對這兩個(gè)包做一些權(quán)限控制的操作。

數(shù)據(jù)表結(jié)構(gòu)

說明:

guard_name字段的默認(rèn)值是web,Laravel-Permission是允許使用不同的guards的。

正如圖上看到的,在管理權(quán)限方面,Laravel-Permission是使用了兩個(gè)維度,一個(gè)是針對角色,一個(gè)是針對用戶。

model_type字段的默認(rèn)值是AppUser,所以對于user表來說沒有直接的外鍵約束,應(yīng)為其他表暫時(shí)還沒有user_id字段。

和Laravel-permission比,是不是明顯感覺表之間的關(guān)系變簡單了??

說明:

上圖中有一個(gè)叫abilities的表,這對應(yīng)于Laravel-permission中的permissions表,然后在Bouncer中,permissions表就關(guān)聯(lián)到abilities中的一系列entity.

在這個(gè)包的所有表中,"Entity"就代表了某一個(gè)操作的具體對象。它可能代表某一類角色,或是某一特定用戶。所以,在上面的表結(jié)構(gòu)中,我們并沒有發(fā)現(xiàn)與user_idusers屬性有直接關(guān)系的表,Laravel-permission中也是如此。

在上面的表中,我們還可以看到一些特殊的字段,比如:abilities.titleabilities.only_ownroles.level,這幾個(gè)字段在以后的使用中會(huì)非常有用。

在Bouncer中,并沒有具體的guard字段。

從Bouncer的表結(jié)構(gòu)中可以看出,這個(gè)設(shè)計(jì)思路有點(diǎn)特別,雖然就4個(gè)表,但是比上面那個(gè)要復(fù)雜點(diǎn),對新手來說會(huì)難以理解。也正因?yàn)樗奶貏e,在使用的時(shí)候會(huì)很靈活。

可使用的方法函數(shù)

兩個(gè)包在使用上大同小異,來對比下:

創(chuàng)建角色/權(quán)限/行為能力

Laravel-permission

在Laravel中你可以使用Facades模式:

use SpatiePermissionModelsRole;
use SpatiePermissionModelsPermission;

Role::create(["name" => "writer"]);

Permission::create(["name" => "edit articles"]);

Bouncer

可以用一行代碼就能創(chuàng)建一個(gè)具有某種行為能力的角色:

Bouncer::allow("admin")->to("ban-users");

執(zhí)行?上面這行,Bouncer就會(huì)分別在roles表和abilities表中創(chuàng)建兩個(gè)記錄。如果你習(xí)慣于Facades的方式的話,也可以用這樣的方法:

use SilberBouncerDatabaseAbility;
Ability::create(["name" => "edit articles"]);

給用戶分配角色

Laravel-permission

$user->assignRole("writer");
$user->assignRole(["writer", "admin"]);

$user->removeRole("writer");

角色同步:

// 用戶所有分配的角色都會(huì)被下面的角色數(shù)組替換
$user->syncRoles(["writer", "admin"]);

Bouncer

$user->assign("admin");
$user->assign(["writer", "admin"]);

$user->retract("admin");

可以看到,兩個(gè)包都支持用一個(gè)變量或一個(gè)數(shù)組來分配角色,但因?yàn)長aravel-permission有一個(gè)角色同步的功能,所以會(huì)跟強(qiáng)大一些,而Bouncer在操作角色同步時(shí)會(huì)需要一些額外的操作。


給用戶分配權(quán)限/行為能力

Laravel-permission

// 分配
$user->givePermissionTo("edit articles");
$user->givePermissionTo("edit articles", "delete articles");
// 撤銷
$user->revokePermissionTo("edit articles");

Bouncer

$user->allow("ban-users");
$user->allow(["ban-users", "edit-articles"]);

在分配權(quán)限時(shí),還可以指定模型,只需要把模型的實(shí)例對象或類名作為第二個(gè)參數(shù):

Bouncer::allow($user)->to("edit", Post::class);
Bouncer::allow($user)->to("edit", $post);

$user->disallow("ban-users");
Bouncer::disallow($user)->to("delete", Post::class);

檢查用戶的權(quán)限/角色

Laravel-permission

檢查角色:

$user->hasRole("writer");
$user->hasAnyRole(Role::all());
$user->hasAllRoles(Role::all());

檢查權(quán)限:

$user->can("edit articles");
$role->hasPermissionTo("edit articles");

Bouncer

檢查角色:

$user->isAn("admin");
$user->isA("subscriber", "editor");
$user->isAll("editor", "moderator");
$user->isNot("subscriber", "moderator");

檢查權(quán)限:

Bouncer::allows("edit articles")

Blade 模版命令

Laravel-permission

@role("writer")
    I"m a writer!
@else
    I"m not a writer...
@endrole
@hasanyrole("writer|admin")
    I have one or more of these roles!
@else
    I have none of these roles...
@endhasanyrole

Bouncer

Bouncer并沒有提供特定的Blade命令。當(dāng)然,無論是哪個(gè)包,都可以在Blade中使用@can@endcan命令。


緩存

Laravel-permission

在Laravel-permission中,為了提高應(yīng)用的性能,或自動(dòng)的存儲(chǔ)角色和權(quán)限數(shù)據(jù)。清除緩存可以使用下面的命令:

php artisan cache:forget spatie.permission.cache

Bouncer

Bouncer會(huì)緩存當(dāng)前請求的所有查詢數(shù)據(jù),如果開啟了cross-request緩存,就會(huì)跨請求緩存。

刷新緩存:

Bouncer::refresh();

當(dāng)然也可以只刷新指定用戶的緩存:

Bouncer::refreshFor($user);

總結(jié)

Laravel-permission優(yōu)點(diǎn):

和Bouncer相比,文檔更全一點(diǎn),Bouncer的README中有些方法并沒有說明

數(shù)據(jù)庫結(jié)構(gòu)更加易懂

syncRoles()方法取代了先刪除再插入的方式

提供了Blade命令

可以使用多個(gè)guards

Bouncer優(yōu)點(diǎn):

一行代碼就能創(chuàng)建一個(gè)角色/行為能力并分配給用戶

可以針對單個(gè)模型開啟或關(guān)閉權(quán)限

不錯(cuò)的緩存機(jī)制

數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)的非常健壯,添加了一些很有用的字段

?相關(guān)項(xiàng)目的推薦

以上兩個(gè)包只是提供了管理角色和權(quán)限的功能,如果有基于這些包的管理模版那該多好呢,下面就介紹兩個(gè):

?Laravel 5.4 admin panel based on Spatie Laravel-permission

?Laravel 5.4 admin panel based on Bouncer

關(guān)于Laravel上的權(quán)限與角色的設(shè)置,以后別再說Entrust了,已經(jīng)過時(shí)啦!??????

原文地址:https://laravel-news.com/two-...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/25705.html

相關(guān)文章

  • 10 個(gè)優(yōu)質(zhì)的 Laravel 擴(kuò)展推薦

    摘要:優(yōu)點(diǎn)使用簡單服務(wù)自定義數(shù)據(jù)庫查詢生成多重定制哪里獲取表單構(gòu)造器說實(shí)話,我不喜歡在中混合表單。表單構(gòu)造器能夠讓你的表單從視圖中分離出去。功能多數(shù)據(jù)庫多域名和子域名自動(dòng)生成或者配置文件支持隊(duì)列支持文件分開存儲(chǔ)。 showImg(https://segmentfault.com/img/remote/1460000015090896); 這里有 10+ 個(gè)用來搭建 Laravel 應(yīng)用的包 ...

    simon_chen 評論0 收藏0
  • PHP / Laravel API 開發(fā)推薦閱讀清單

    showImg(https://segmentfault.com/img/bV6aHV?w=1280&h=800); 社區(qū)優(yōu)秀文章 Laravel 5.5+passport 放棄 dingo 開發(fā) API 實(shí)戰(zhàn),讓 API 開發(fā)更省心 - 自造車輪。 API 文檔神器 Swagger 介紹及在 PHP 項(xiàng)目中使用 - API 文檔撰寫方案 推薦 Laravel API 項(xiàng)目必須使用的 8 個(gè)...

    shmily 評論0 收藏0
  • f-admin——基于Laravel框架開發(fā)的基礎(chǔ)權(quán)限后臺(tái)系統(tǒng)

    摘要:基礎(chǔ)權(quán)限后臺(tái)本項(xiàng)目碼云,目前已在公司產(chǎn)品應(yīng)用,運(yùn)行在數(shù)個(gè)客戶服務(wù)器內(nèi)。基礎(chǔ)權(quán)限后臺(tái)是一套基于框架開發(fā)的系統(tǒng),不需要開發(fā)者重復(fù)不必要的工作,就可以實(shí)現(xiàn)后臺(tái)功能的快速開發(fā),其主要特點(diǎn)包括集成,安裝使用方便。 f-admin基礎(chǔ)權(quán)限后臺(tái) ?? 本項(xiàng)目 GitHub / Gitee(碼云),目前已在公司產(chǎn)品應(yīng)用,運(yùn)行在數(shù)個(gè)客戶服務(wù)器內(nèi)。 f-admin基礎(chǔ)權(quán)限后臺(tái)是一套基于Laravel框架開...

    Ali_ 評論0 收藏0
  • Any-基于Laravel5.4新的權(quán)限管理后臺(tái)骨架

    摘要:最簡化權(quán)限管理系統(tǒng),基于開發(fā)。基于開發(fā),唯一優(yōu)化的是用權(quán)限和路由別名綁定,這樣代碼寫好之后就可以直接使用。如果是超級(jí)管理員,即使沒有這個(gè)權(quán)限會(huì)自動(dòng)賦予權(quán)限給超級(jí)管理員角色。默認(rèn)管理員賬號(hào)密碼。然后正常執(zhí)行命令其他命令即可。 Any 最簡化權(quán)限管理系統(tǒng),基于 Laravel5.4 開發(fā)。由于 Laravel5.5 發(fā)布推遲,只好先寫個(gè) Laravel5.4版本的,后面再升級(jí)上去。演示地址...

    Lavender 評論0 收藏0
  • RBAC-基于角色權(quán)限管理

    摘要:基于角色的權(quán)限管理權(quán)限管理,基于角色的訪問控制,就是用戶通過角色與權(quán)限進(jìn)行關(guān)聯(lián)。這樣,就構(gòu)造成用戶角色權(quán)限的授權(quán)模型。角色可以理解為一定數(shù)量的權(quán)限的集合,權(quán)限的載體。版主可管理版內(nèi)的帖子可管理版內(nèi)的用戶等,這些是權(quán)限。 RBAC-基于角色的權(quán)限管理 RBAC權(quán)限管理 RBAC(Role-Based Access Control,基于角色的訪問控制),就是用戶通過角色與權(quán)限進(jìn)行關(guān)聯(lián)。簡...

    dingding199389 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<