迄今爲止,我一直在使用Yii 1.1.14開發web應用程序,但現在是升級的時候了。對Yii2 RBAC的懷疑
我工作的公司開發了自己的訪問控制系統,直到我看到它真的是什麼樣子的時候,我才真正確定...數據庫中8個表的組合(不包括用戶表) ,還有一堆外鍵。
- 1表控制器
- 1表的行動
- 1表的菜單類別
- 1表類型的用戶
- 而其他表的基本上只是連接2個或3個這些表一次。
它運作良好,但在我看來它是非常費時維護所有這些表,並在某些時候,當你的應用程序上線,如果它擊中了一定的用戶量也可以得到很慢。特別是因爲其中的2個表具有用戶的表主鍵作爲外鍵。
所以我決定,當我開始在Yii 2上開發時,我將開始使用RBAC,所以我開始在線尋找教程......只找到作者角色的許多不同版本的相同代碼,以及創建或更新帖子的權限。
我在Youtube上發現了5個視頻的組合,但它們都是關於Yii 1 RBAC的。他們是有幫助的,因爲我設法瞭解了RBAC的大部分功能,但是我仍然有一些疑問,我會在下面列舉一下 。請記住,對於此訪問控制系統,我使用的是DBManager類。
我的疑惑
的Yii 1的RBAC使用有3個表:
auth_assignment
,auth_item
和auth_item_child
。現在在Yii 2 RBAC中,出現一個名爲auth_rule
的新表,我仍然不明白那個特定表在那裏做什麼,如何使用它或如何填充它。我看到可以通過使用控制器的行爲方法來限制用戶對某些動作的訪問,並根據用戶的角色爲某些動作分配訪問權限,但是當涉及到這個時,我必須將我的問題分解爲2:
2.1。 第一條:如果您可以通過在behavior方法中設置操作來限制對操作的訪問,那麼對
auth_item
表保存權限有什麼用處?2.2。 Second:如果你決定根據權限控制訪問,那麼你到底該怎麼做,因爲我發現自己在每個函數中都寫了下列類型的代碼,我不認爲使用RBAC應該是這樣的乏味。必須有另一種方式。
public function actionView($id) { if(Yii::$app->user->can('view-users')){ return $this->render('view', [ 'model' => $this->findModel($id), ]); }else{ #Redirect to a custom made action that will show a view #with a custom error message $this->redirect(['//site/notauthorized']); } }
因爲我們現在使用的門禁系統,當用戶登錄時,一個複雜的查詢被執行,將最終返回將被保存爲一個會話變量數組,將是用於創建一個菜單,其中包含與菜單類別一樣多的下拉列表,用戶有權訪問的控制器屬於該菜單。 RBAC如何做到這一點?
你應該在這裏寫出答案的相關部分,而不只是鏈接到一些資源。 – GMchris 2016-02-24 13:43:37