2009-09-21 92 views
4

還有點兒含糊所以這裏的肉的東西:如何有效處理用戶角色?

我所看到的認證系統,其執行以下

  1. 一個爲每個角色單獨的角色表,和一個單獨的權限表,所有用戶一個表
  2. 有管理員

一個單獨的表有,我已經錯過了很多,我知道了。但我試圖真正要求的是:

我應該如何設計我的數據庫在一個網站,我有很多種類的用戶和每個訪問不同?

如果我決定使用另一種類型的權限添加其他類型的用戶,我將如何使它足夠靈活?

我目前有一個用戶類,並計劃讓我的管理員類擴展該用戶類。或者,如果我可以將它們都放在一個類中,並且只需分配必要的權限,那麼這有點矯枉過正?

回答

3

你可以有表 -

user (user_id, name ...) 
permission (perm_id, name, desc) 
role (role_id, title) 
user_role (user_id, role_id) 
user_permission (user_id, perm_id) 
role_permission (role_id, perm_id) 

這樣,根據您的需要,你可以在系統中儘可能多的角色,你有兩個角色級別權限,用戶級權限。

2

您可以添加額外的抽象級別。基本上你可以在數據庫中添加一個表來管理用戶組,併爲這些組分配組權限。不同的用戶可以有多個組。

通過這種方式,您可以快速將權限更改爲預定義的一組規則,而無需單獨更改每個用戶。你也可以同時更改一組用戶的權限

1

我認爲你需要在這裏思考幾個概念。第一個將是訪問控制列表(ACL),然後是驗證。

在ACL中,可以定義資源,這是要限制訪問和角色,這是可以請求對資源的訪問對象的對象。

我實現我的ACL的方式是使用Zend_Acl。我有一個表稱爲user_roles

user_roles('user_role_id', 'name', 'permissions', 'parent_role_id')` 

我也有一個表稱爲user_role_maps一個用戶ID映射到用戶角色ID。 (你可以把它作爲用戶表的一列,但這隻取決於你對標準化的感受;-))然後我可以從這個表中構建我的Zend_Acl對象,然後當用戶通過身份驗證時,我可以確定他們有權訪問哪些資源以及他們可以在資源上執行哪些操作。 (A資源實現Zend_Acl_Resource_Interface所以它是通過識別作爲Zend_Acl資源。

至於認證,這是一個簡單的概念(在我看來),你可能已經想通了某種形式的令牌匹配認證系統自己。關鍵的方面是使用經過身份驗證的用戶ID來確定其角色。 Zend框架還在Zend_Auth中爲此提供了一個包。

我在這裏使用了很多Zend Framework的建議,原因在於它們的包對其他包的依賴性很少,使得插入組件非常簡單。我確信其他框架提供了ACL包如果你有時間和理解,你可以使用,或者推出自己的產品。

祝你好運。

相關問題