作者 主題: PHP權限群組管理  (閱讀 4033 次)

0 會員 與 1 訪客 正在閱讀本文。

N956038

  • 懷疑的國中生
  • **
  • 文章數: 84
    • 檢視個人資料
PHP權限群組管理
« 於: 2012-02-25 14:18 »


新增的值為 1 修改的值為2 刪除值為4 查詢值為8 其他值為16

因為要做修改的功能,假設已經先建立了一個群組,並擁有電子報管理功能
然後擁有新增 (1)的權限,資料庫就會儲存 2-1,如果又增加會員管理功能,就會變成 2-1,5-31
可是當要修改這個群組的時候,要判斷擁有那些值就打勾。

但是人工計算出有31種結果,如下:


1,2,3
4,5,6,7
8,9,10,11,12,13,14,15
16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31




如果寫CASE判斷多少總和值就勾選哪幾項的話,會很難判斷.....
光CASE要寫一大堆,請問各位大大有比較好的方式嗎ˊˋ
« 上次編輯: 2012-02-25 15:53 由 N956038 »
用心的學習程式,將所有的邏輯觀念培養好,會是件好事情。

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
Re: PHP權限群組管理
« 回覆 #1 於: 2012-02-25 18:33 »


新增的值為 1 修改的值為2 刪除值為4 查詢值為8 其他值為16

因為要做修改的功能,假設已經先建立了一個群組,並擁有電子報管理功能
然後擁有新增 (1)的權限,資料庫就會儲存 2-1,如果又增加會員管理功能,就會變成 2-1,5-31
可是當要修改這個群組的時候,要判斷擁有那些值就打勾。

但是人工計算出有31種結果,如下:


1,2,3
4,5,6,7
8,9,10,11,12,13,14,15
16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31




如果寫CASE判斷多少總和值就勾選哪幾項的話,會很難判斷.....
光CASE要寫一大堆,請問各位大大有比較好的方式嗎ˊˋ

用位元運算來判斷項目的值

N956038

  • 懷疑的國中生
  • **
  • 文章數: 84
    • 檢視個人資料
Re: PHP權限群組管理
« 回覆 #2 於: 2012-02-25 19:15 »
用位元運算來判斷項目的值

可以給我個方向嗎~"~
用心的學習程式,將所有的邏輯觀念培養好,會是件好事情。

slime

  • 俺是博士!
  • *****
  • 文章數: 1692
    • 檢視個人資料
Re: PHP權限群組管理
« 回覆 #3 於: 2012-02-26 06:01 »

電子報發佈管理(2) - 新增(1) 修改(2) 刪除(4) 查詢(8) 其他(16)
會員資料管理(5) - 新增(1) 修改(2) 刪除(4) 查詢(8) 其他(16)

群組有 A, B, C
系統表格記錄為"群組代號", "功能", "權限"

A,2,17 -> A 群組, 電子報發佈管理, 17=16+1 -> 有"新增"與"其他"兩個功能
B,2,22 -> A 群組, 電子報發佈管理, 22=16+4+2 -> 有"修改", "刪除"與"其他"三個功能

Yamada 網友說的, 就是把 17 能換成 16+1 的處理動作, 這是十進位與二進位換算, 換算後再判斷在第幾個位元, 對應某一個功能的開或關.



另外一種寫法:
系統表格記錄為"群組代號", "功能", "新增權限", "修改權限", "刪除權限", "查詢權限", "其他權限", 直接寫成:
A,2,1,0,0,0,1
B,2,0,1,1,0,1



冷笑話: 我的 IP 是 127.0.0.1

kiang

  • 活潑的大學生
  • ***
  • 文章數: 310
    • 檢視個人資料
    • 就這間電腦工作室
Re: PHP權限群組管理
« 回覆 #4 於: 2012-03-08 09:08 »
就直接用 ACL 吧(嗯,剛開始門檻有點高...),參考這個
http://bloggingsquared.com/web-development/cakephp-acl-tutorial/
****************************************************
Finjon Kiang / 江明宗
Just This Computer Studio / 就這間電腦工作室
Website: http://olc.tw
****************************************************