台灣最大程式設計社群網站
線上人數
1344
 
會員總數:246213
討論主題:189783
歡迎您免費加入會員
討論區列表 >> PHP >> 問權限系統設計原理
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
問權限系統設計原理
價值 : 210 QP  點閱數:3657 回應數:12
樓主

蒼鴻
初學者
440 14
1235 186
發送站內信

各位小弟俺有個設計上的疑問~~!
目前小弟自己開發ERP,碰到一個問題~~!
需要用權限系統~~!
俺開發的ERP目前有19種功能 每種功能有三種狀態 (0:可管理 1:不可管理 2:不顯示)
以下小弟以表格方式來講
功能簡稱 a b c ....19種
權限排序 0 1 2 .......
權限排序 1 1 1 .......
以此類推19種功能+3種狀態的組合
小弟的土法煉鋼法
01201201001200120存入資料表
再用Switch去配 不過奈何組合太多 所以才上線請叫各方高手/前輩
有什麼設計原理可以點點小弟~~!
不用code 跟俺說原理小弟俺來try and coding就好嚕~~!
第一次設計這種沒有頭緒~~! 小弟先跟各位大大們說謝謝~~!
如有問題不清楚 請跟小弟俺說~~!

搜尋相關Tags的文章: [ 設計原理 ] ,
本篇文章發表於2012-10-30 15:19
== 簽名檔 ==
PHP新手上路~~!努力學習中~~俺會的俺會分享~~!
個人網站:http://hung.66rt.com/
MSN:chingfeng18@hotmail.com
[歡迎交流]
1樓
作者回應

蒼鴻
檢舉此回應
補充說明:
俺使用 CodeIgniter 使用 MC + V架構
本篇文章回覆於2012-10-30 15:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
不錯的參考

香帥
檢舉此回應
另外一種方法為狀態歸類法
0abdef...
1hkc...
2ghi....
當要管理時,只抓0類,其它依此類推
本篇文章回覆於2012-10-30 21:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
最有價值解答

Solty
檢舉此回應
你用MVC,事情就很簡單阿
ACL這東西就是6個要素
account 帳號
role 角色<--其實這玩意說破了就是群組概念
resources 資源<--這就對應到你的controller
function 功能<--這就是你的abc,對應到你controller中的action
action 行為<--這就是你的012,資料表角度來說就是增,刪,查,改
permission 權限<--這層多數狀況不需實作,除非你有必要細控到每個表的欄位都要控制

1個帳號可以分飾多個角色
1個角色可以存取多個資源
1個資源可以有多個功能
....etc
每層間都是一對多的關係,這樣有了解?
本篇文章回覆於2012-10-30 21:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

蒼鴻
檢舉此回應
謝謝Solty,香帥 大大:
小弟俺研究一下~~!
本篇文章回覆於2012-10-31 08:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

蒼鴻
檢舉此回應
俺看了一下忘記說需求(眾歐
俺的權限系統屬於 金字塔的架構方式
頂端群組 (就一個管理員群組)
頂端群組開的次等群組 (這個群組所有權限由頂端群組給予)
次等群組裡面的個別小帳號 (個別小帳號的權限由次等群組給予)


權限給予範例
頂端給予次等 15個功能權限
所以次等群組可以給他底下的帳號15個功能權限
本篇文章回覆於2012-10-31 08:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

蒼鴻
檢舉此回應
俺看了一下忘記說需求(眾歐
俺的權限系統屬於 金字塔的架構方式
頂端群組 (就一個管理員群組)
頂端群組開的次等群組 (這個群組所有權限由頂端群組給予)
次等群組裡面的個別小帳號 (個別小帳號的權限由次等群組給予)


權限給予範例
頂端給予次等 15個功能權限
所以次等群組可以給他底下的帳號15個功能權限

Solty大大:
resources 資源 地方可以幫小弟俺解釋一下嗎??
感激不盡~~~ orz~~!
本篇文章回覆於2012-10-31 08:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

蒼鴻
檢舉此回應
小弟邏輯整理一下~~!
一個帳號在某群組,該群組可使用什麼功能,和在此功能有什麼權限~~!
ex:
accout=test;
Groups=test;
function=a,b,c,d,e,f;
action=0,1,2,0,1;
permission={Admin or User}
本篇文章回覆於2012-10-31 08:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
不錯的參考

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
首先我先理清幾個問題。

我想知道為何你需要「不顯示」的狀態。因為權限選項值如果不是開與關的話。就只能土法練鋼的方式。

正常來說~~~權限的定義方式及儲存的方式有非常的多

我比較喜歡用的還是2進位法的方式。但因為這只有開與關。而且其數值也有一定的最大值。
正常我最多就是存到2^30的值。也就是可以記錄30個權限開關值。

會事先定義各權限的對應值。用常數來定義。


define('P_A', 1);
define('P_B', 2);
define('P_C', 4);

這樣我在SQL內的操作就會比較單純,如我要加入A權限。則
(欄位我用中文字代替,但請勿用中文字欄位)

$sql = "UPDATE db SET 權限值 = 權限值+if((權限值 & ".P_A.") ,0,".P_A.")";
要關閉A權限就用
$sql = "UPDATE db SET 權限值 = 權限值-if((權限值 & ".P_A.") ,".P_A.",0)";

以上我沒給WHERE的條件,你得要自行加入。

當然~~~這只能應付開與關而已。如你要求的要開、關、不顯示三種狀態的話就不太適合。
本篇文章回覆於2012-11-01 18:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

蒼鴻
檢舉此回應
土法煉鋼...
俺現在是用兩個資料表 第一個資料表 功能列表 第二 users
功能列表把功能先分類 class class1 class2 class3 把功能分成4個分類 在分四個功能篩選 C C1 C2 C3
users table 裡面欄位會有分類 class class1 class2 class3

第一個先篩選分類顯不顯示
EX:class = 0 or 1

俺這是先使用class過濾,在想class分多一點 用土法煉鋼比較輕鬆 兩個一組 01 10 11 12 21 22 02 20 把組合結果用少一點~~!
本篇文章回覆於2012-11-02 09:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

蒼鴻
檢舉此回應
Solty,香帥,星空大大:
感謝三位大大,這樣小弟有方向了~~!
本篇文章回覆於2012-11-02 10:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
這樣的設計靈活性不夠。未來如果要增加或移除就還得要來修改程式
本篇文章回覆於2012-11-02 10:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

蒼鴻
檢舉此回應
三個基準值
$P=0;(有管理權限)
$P1=1;(只能顯示)
$P2=2;(不顯示)
如果再群組那邊新增欄位對應功能呢??
功能俺會再做刪減 有些共用功能 可以比較鬆 EX:討論區(可以省略$P2)


本篇文章回覆於2012-11-02 10:56
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.