做者:白狼 出處:http://t.cn/Rci0GxS 本文版權歸做者,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。 上一篇文章中,咱們瞭解到了什麼是基於角色的訪問控制。若是讓咱們本身實現一套基於角色的訪問控制,咱們又該如何設計,如何開發呢?php
開發以前有必要先來分析一下數據表:html
也就是說,若是如今讓咱們本身從零開始實現一套基於角色的訪問控制,咱們總結了上面4小條。開始以前不少人會以爲很難,無從下手,如今感受呢,是否是思路清晰了好多?開始本篇主題以前有必要再叨嘮兩句。有些同窗學蒙了,爲啥這個時候說這些有的沒的呢,不是要學實戰嗎?其實咱們如今步步都在實戰,網上你也找不到這麼好的教程!咱們如今就是在爲後面的課程作一些鋪墊,由於不少人後面構建好了rbac,可是卻不明白其來龍去脈!因此,這裏基礎的理解很重要!sql
言歸正傳。官方自帶的rbac在哪呢?在 vendor\yiisoft\yii2\rbac 目錄下。數據庫
還記得咱們以前講的migrate的用法嗎?接下來咱們又要用到migrate生成官方自帶的數據表了。(部分同窗直接拷貝sql執行,可是sql自己未設定utf8模式,致使後面亂碼,此處咱們統一使用migrate進行操做)數組
在vendor同級目錄,也就是咱們項目的頂級目錄下執行yii2
./yii migrate --migrationPath=@yii/rbac/migrations/
而後輸入yes..而後報錯了,報錯不可怕,可怕的是看到錯誤的人躲着錯誤問這問那!咱們看看具體什麼錯yii
Exception 'yii\base\InvalidConfigException' with message 'You should configure "authManager" component to use database before executing this migration.'
提示咱們說在執行這條migration以前讓咱們先配置下authManager組件!也就是說咱們還沒有配置某些操做,那咱們就配置下authManager組件唄網站
打開common\config\main.php文件,在components數組中加入authManager組件this
//authManager有PhpManager和DbManager兩種方式, //PhpManager將權限關係保存在文件裏,這裏使用的是DbManager方式,將權限關係保存在數據庫. "authManager" => [ "class" => 'yii\rbac\DbManager', ],
而後咱們再次執行上面的migrate命令,控制檯提示咱們成功建立了4張數據表,咱們打開數據庫看了下,果然如此。設計
數據表咱們是一股腦的建立完了,可是每一個數據表具體什麼含義呢?是否真的就如咱們一開始所分析的呢?
auth_item:用於存儲角色、權限和路由
auth_item_child:角色-權限的關聯表
auth_assignment:用戶-角色的關聯表
大體上跟咱們所分析的差很少,只不過關於角色、權限這裏共用了一張數據表,統稱爲受權項目。
說明一下:上面說的路由,實質就是咱們權限所控制的最小粒度範圍。那爲何要寫角色、權限和路由呢?角色,能夠理解爲可爲其分配的是角色更大級別的,權限,能夠理解爲角色的濃縮版,實質就是一個角色,只不過關聯的是最小粒度-路由。
須要提醒的是:4張數據表的表名分別對應着authManager組件類yii\rbac\DbManager的4個屬性,也就是說若是咱們在authManager中配置了不一樣的屬性值,生成的數據表名也會隨之改動,可自行嘗試!
下一章節,咱們利用剛剛配置的authManager組件,直接手把手帶你飛,手動敲出一個簡單強大的權限管理,讓rbac變的so easy,期待吧!
[考慮目前國內網站大部分採集文章十分頻繁,更有甚者不註明原文出處,原做者更但願看客們查看原文,以防有任何問題不能更新全部文章,避免誤導!]