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

資訊專欄INFORMATION COLUMN

Yii授權之基于角色的存取控制 (RBAC)

greatwhole / 1641人閱讀

摘要:一基本概念角色是權限的集合例如建貼改貼。特定情況下,一個角色可能由其他角色或權限構成,而權限又由其他的權限構成。提供了兩套授權管理器和。前者使用腳本存放授權數據,而后者使用數據庫存放授權數據。該表存放授權條目的層次關系。

一:基本概念

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

可以用一個規則 rule 與一個角色或者權限關聯。一個規則用一段代碼代表, 規則的執行是在檢查一個用戶是否滿足這個角色或者權限時進行的。例如,"改帖" 的權限 可以使用一個檢查該用戶是否是帖子的創建者的規則。權限檢查中,如果該用戶 不是帖子創建者,那么他(她)將被認為不具有 "改帖"的權限。

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

二:配置 RBAC

在開始定義授權數據和執行存取檢查之前,需要先配置應用組件 yiibaseApplication::authManager 。 Yii 提供了兩套授權管理器: yiirbacPhpManager 和 yiirbacDbManager。前者使用 PHP 腳本存放授權數據, 而后者使用數據庫存放授權數據。 如果你的應用不要求大量的動態角色和權限管理, 你可以考慮使用前者

1:使用yiirbacPhpManager

return [
    // ...
    "components" => [
        "authManager" => [
            "class" => "yii
bacPhpManager",
        ],
        // ...
    ],
];

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

yiirbacPhpManager 默認將 RBAC 數據保存在 @app/rbac 目錄下的文件中。 如果權限層次數據在運行時會被修改,需確保WEB服務器進程對該目錄和其中的文件有寫權限。

2:使用yiirbacDbManager

(1)配置yiirbacDbManager

return [
    // ...
    "components" => [
        "authManager" => [
            "class" => "yii
bacDbManager",
            // uncomment if you want to cache RBAC items hierarchy
            // "cache" => "cache",
        ],
        // ...
    ],
];

這里注意:

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

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

使用yiirbacDbManager的話,需要生成4個數據庫表存放權限數據(他們都有默認表名,如果你需要修改表名的話,在配置yiirbacDbManager時進行修改)

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

在項目目錄執行

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

執行上面的命令后,這時候在我們的數據庫中就會生成上述所說的四個表了

如果你不細化使用命令生成數據庫的話,你可以將vendoryiisoftyii2rbacmigrationsschema-mysql.sql 的內容拷貝里面到數據庫運行生成數據表

生成對應的權限表之后,這時候我們就可以使用Yii::$app->authManager來訪問 authManager

三:建立授權數據

1:添加(創建)權限(在auth_item表中生成權限數據,type為2表示權限)

$auth = Yii::$app->authManager;
// 添加 "createPost" 權限
$createPost = $auth->createPermission("createPost");
$createPost->description = "創建了createPost權限";
$auth->add($createPost);

2:創建角色(在auth_item表中生成角色數據,type為1表示角色)

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

3:給角色賦予權限

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

$auth = Yii::$app->authManager;
$createPost = $auth->createPermission("createPost");//創建權限對象
$role = $auth->createRole("author");//創建角色對象
$auth->addChild($role, $createPost); //添加對應關系(給author角色添加createPost權限)

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

$auth = Yii::$app->authManager;
$role1 = $auth->createRole("author1");//創建角色對象
$role2 = $auth->createRole("author2");//創建權限對象
$auth->addChild($role1, $role2); //添加對應關系(給author1角色添加author2角色所有權限)

4:給用戶分配角色

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

四:驗證權限

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

獲取用戶所屬角色

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

獲取用戶所屬權限

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

上面就是基于角色的存取控制 (RBAC)簡單了解,詳細可參考Yii的官方文檔:https://www.yiichina.com/doc/...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31833.html

相關文章

  • RBAC筆記

    摘要:例如,系統中某個用戶辭職了,只需要將系統中該用戶的角色授權撤銷即可。 Q0.有哪些概念需要知道? 一些概念的具體定義如下 用戶(user): 和計算機系統交互的人(在許多設計方案中,單個用戶可能擁有多個登錄標識(ID),這些標識可能同時處于活躍狀態,但身份驗證機制可以使多個標識匹配到某個具體的人,即用戶對于計算機系統來說具有唯一性) 主體(subject): 一個代表用戶行為的計算機...

    ZweiZhao 評論0 收藏0
  • PHP -Casbin: 支持 ACL、RBAC、ABAC 多種模型 PHP 權限管理框架

    摘要:是一個用語言打造的輕量級開源訪問控制框架,目前在開源。采用了元模型的設計思想,支持多種經典的訪問控制方案,如基于角色的訪問控制基于屬性的訪問控制等。 showImg(https://segmentfault.com/img/bVbkDJf?w=500&h=220); PHP-Casbin 是一個用 PHP 語言打造的輕量級開源訪問控制框架( https://github.com/php...

    rainyang 評論0 收藏0
  • yii實現rbac詳解

    摘要:在中,權限與角色相關聯,用戶通過成為適當角色的成員而得到這些角色的權限。這就極大地簡化了權限的管理。角色可依新的需求和系統的合并而賦予新的權限,而權限也可根據需要而從某角色中回收。角色與角色的關系可以建立起來以囊括更廣泛的客觀情況。 之前有個朋友問我yii的rbac怎么做,以前大學的時候有接觸過,很長時間沒用了,也忘記了,正好這幾天比較閑,重新捋了下大體思路,希望可以幫到困在yii的r...

    lentrue 評論0 收藏0
  • Yii2系列教程五:簡單用戶權限管理

    摘要:原文來自上一篇文章講了用戶的注冊,驗證和登錄,這一篇文章按照約定來說說之中的用戶和權限控制。探尋上面的一些列設置和代碼更改,已經實現了一小部分的用戶控制登錄的用戶才能發表。 原文來自: https://jellybool.com/post/programming-with-yii2-user-access-controls 上一篇文章講了用戶的注冊,驗證和登錄,這一篇文章按照...

    livem 評論0 收藏0
  • Yii-Casbin:在 Yii 里使用 Casbin,支持 ACL、RBAC多種模型權限管理框架

    摘要:是一個用語言打造的輕量級開源訪問控制框架,目前在開源。采用了元模型的設計思想,支持多種經典的訪問控制方案,如基于角色的訪問控制基于屬性的訪問控制等。 PHP-Casbin 是一個用 PHP 語言打造的輕量級開源訪問控制框架( https://github.com/php-casbin... ),目前在 GitHub 開源。PHP-Casbin 采用了元模型的設計思想,支持多種經典的訪問...

    shusen 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<