欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Yii授權(quán)之基于角色存取控制的案例分析-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)Yii授權(quán)之基于角色存取控制的案例分析的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)“設(shè)計(jì)定江山,服務(wù)贏天下“的思想,用細(xì)節(jié)和態(tài)度獲得客戶的認(rèn)可與同行的尊重,服務(wù)是創(chuàng)新互聯(lián)企業(yè)文化中重要的核心思想,每一位員工要致力成為客戶心中堅(jiān)實(shí)的服務(wù)后盾。

一:基本概念

角色是 權(quán)限 的集合 (例如:建貼、改貼)。一個(gè)角色 可以指派給一個(gè)或者多個(gè)用戶。要檢查某用戶是否有一個(gè)特定的權(quán)限, 系統(tǒng)會(huì)檢查該包含該權(quán)限的角色是否指派給了該用戶。

可以用一個(gè)規(guī)則 rule 與一個(gè)角色或者權(quán)限關(guān)聯(lián)。一個(gè)規(guī)則用一段代碼代表, 規(guī)則的執(zhí)行是在檢查一個(gè)用戶是否滿足這個(gè)角色或者權(quán)限時(shí)進(jìn)行的。例如,"改帖" 的權(quán)限 可以使用一個(gè)檢查該用戶是否是帖子的創(chuàng)建者的規(guī)則。權(quán)限檢查中,如果該用戶 不是帖子創(chuàng)建者,那么他(她)將被認(rèn)為不具有 "改帖"的權(quán)限。

角色和權(quán)限都可以按層次組織。特定情況下,一個(gè)角色可能由其他角色或權(quán)限構(gòu)成, 而權(quán)限又由其他的權(quán)限構(gòu)成。Yii 實(shí)現(xiàn)了所謂的 局部順序 的層次結(jié)構(gòu),包含更多的特定的 樹 的層次。 一個(gè)角色可以包含一個(gè)權(quán)限,反之則不行。(譯者注:可理解為角色在上方,權(quán)限在下方,從上到下如果碰到權(quán)限那么再往下不能出現(xiàn)角色)

二:配置 RBAC

在開始定義授權(quán)數(shù)據(jù)和執(zhí)行存取檢查之前,需要先配置應(yīng)用組件 yiibaseApplication::authManager 。 Yii 提供了兩套授權(quán)管理器: yiirbacPhpManager 和 yiirbacDbManager。前者使用 PHP 腳本存放授權(quán)數(shù)據(jù), 而后者使用數(shù)據(jù)庫存放授權(quán)數(shù)據(jù)。 如果你的應(yīng)用不要求大量的動(dòng)態(tài)角色和權(quán)限管理, 你可以考慮使用前者

1:使用yiirbacPhpManager

return [    // ...
    'components' => [        'authManager' => [            'class' => 'yii\rbac\PhpManager',
        ],        // ...
    ],
];

配置完成之后你就可以通過Yii::$app->authManager來訪問 authManager

yiirbacPhpManager 默認(rèn)將 RBAC 數(shù)據(jù)保存在 @app/rbac 目錄下的文件中。 如果權(quán)限層次數(shù)據(jù)在運(yùn)行時(shí)會(huì)被修改,需確保WEB服務(wù)器進(jìn)程對該目錄和其中的文件有寫權(quán)限。

2:使用yiirbacDbManager

(1)配置yiirbacDbManager

return [    // ...
    'components' => [        'authManager' => [            'class' => 'yii\rbac\DbManager',            // uncomment if you want to cache RBAC items hierarchy
            // 'cache' => 'cache',
        ],        // ...
    ],
];

這里注意:

如果你使用的是Yii的基礎(chǔ)模板的話,上面的配置你需要在config/console.php和config/web.php文件中都進(jìn)行配置,如果你是Yii的高級(jí)模板的話,只需要在common/config/main.php文件中配置一次就可以了

(2)生成所需要的權(quán)限表

使用yiirbacDbManager的話,需要生成4個(gè)數(shù)據(jù)庫表存放權(quán)限數(shù)據(jù)(他們都有默認(rèn)表名,如果你需要修改表名的話,在配置yiirbacDbManager時(shí)進(jìn)行修改)

itemTable: 該表存放授權(quán)條目(譯者注:即角色和權(quán)限)。默認(rèn)表名為 "auth_item" 。
itemChildTable: 該表存放授權(quán)條目的層次關(guān)系。默認(rèn)表名為 "auth_item_child"。
assignmentTable: 該表存放授權(quán)條目對用戶的指派情況。默認(rèn)表名為 "auth_assignment"。
ruleTable: 該表存放規(guī)則。默認(rèn)表名為 "auth_rule"。

在項(xiàng)目目錄執(zhí)行

yii migrate --migrationPath=@yii/rbac/migrations

執(zhí)行上面的命令后,這時(shí)候在我們的數(shù)據(jù)庫中就會(huì)生成上述所說的四個(gè)表了

Yii授權(quán)之基于角色存取控制的案例分析

如果你不細(xì)化使用命令生成數(shù)據(jù)庫的話,你可以將vendoryiisoftyii2rbacmigrationsschema-mysql.sql 的內(nèi)容拷貝里面到數(shù)據(jù)庫運(yùn)行生成數(shù)據(jù)表

生成對應(yīng)的權(quán)限表之后,這時(shí)候我們就可以使用Yii::$app->authManager來訪問 authManager

三:建立授權(quán)數(shù)據(jù)

1:添加(創(chuàng)建)權(quán)限(在auth_item表中生成權(quán)限數(shù)據(jù),type為2表示權(quán)限)

$auth = Yii::$app->authManager;// 添加 "createPost" 權(quán)限$createPost = $auth->createPermission('createPost');
$createPost->description = '創(chuàng)建了createPost權(quán)限';
$auth->add($createPost);

2:創(chuàng)建角色(在auth_item表中生成角色數(shù)據(jù),type為1表示角色)

$auth = Yii::$app->authManager;
$role = $auth->createRole('author');
$role->description = '創(chuàng)建了author角色';
$auth->add($role);

3:給角色賦予權(quán)限

(1)給角色賦予指定權(quán)限

$auth = Yii::$app->authManager;
$createPost = $auth->createPermission('createPost');//創(chuàng)建權(quán)限對象
$role = $auth->createRole('author');//創(chuàng)建角色對象
$auth->addChild($role, $createPost); //添加對應(yīng)關(guān)系(給author角色添加createPost權(quán)限)

(2)給角色賦予指定角色的所有權(quán)限

$auth = Yii::$app->authManager;
$role1 = $auth->createRole('author1');//創(chuàng)建角色對象
$role2 = $auth->createRole('author2');//創(chuàng)建權(quán)限對象
$auth->addChild($role1, $role2); //添加對應(yīng)關(guān)系(給author1角色添加author2角色所有權(quán)限)

4:給用戶分配角色

$auth = Yii::$app->authManager;
$role = $auth->createRole('author');//創(chuàng)建角色對象$auth->assign($role, 1); #1是IdentityInterface::getId()返回的id,及用戶表的id

四:驗(yàn)證權(quán)限

\Yii::$app->user->can($action) #$action表示權(quán)限\Yii::$app->user->can('createPost') #判斷用戶是否具有createPost權(quán)限

獲取用戶所屬角色

$auth = Yii::$app->authManager;
$roles = $auth->getRolesByUser($userId);

獲取用戶所屬權(quán)限

$auth = Yii::$app->authManager;
$roles = $auth->getPermissionsByUser($userId);

感謝各位的閱讀!關(guān)于Yii授權(quán)之基于角色存取控制的案例分析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

當(dāng)前標(biāo)題:Yii授權(quán)之基于角色存取控制的案例分析-創(chuàng)新互聯(lián)
文章出自:http://chinadenli.net/article44/dgpche.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、用戶體驗(yàn)、網(wǎng)站內(nèi)鏈、微信公眾號(hào)、網(wǎng)站排名、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作