Re: [請益] 用php控制操作者權限
權限(authorization)檢查 通常不離 身份認證(authentication), 可以做到
極細密, 相對資料規劃的架構也相當複雜; 也可以做得相當簡單, 只要用
檔案存幾行資料就行了.
就這個例子, 較簡單的方法就是針對不同的用戶群組設不同的menu樣板,
不同的menu樣板中記錄著各自所應許給用戶的功能權限, 預先存成檔案儲存
起來. 在用戶進行完身份認證確認其所屬群組後, 接著根據他的所屬群組推
出相對應的menu樣板就行了.
menu樣板設計如下:
[public_menu.txt]
register,我要註冊
news_list,新聞快報
story_list,事件報導
...
[admin_menu.txt]
user_add,用戶新增
user_list,用戶列表
user_delete,用戶刪除
user_edit,用戶編修
...
[user_class_1_menu.txt]
...
[user_class_2_menu.txt]
...
若是要擋非法執行的, 也是同樣的方法, 但可分兩種情況:
case 1. 未經身份認證, 非法執行: 在session檢查不到用戶的登入資料時即可擋掉.
case 2. 已經身份認證, 非法執行(例如會員想偷用admin權限才能執行的功能):
只要在該用戶所屬的menu樣板中沒有該功能的記錄, 即判定為非法執行.
另外還有合法執行的情形:
case 3. 未經身份認證, 合法執行: 有些功能無需身份認證亦可執行, 例如
"我要註冊".
case 4. 已經身份認證, 合法執行: 這是預期的合理情況, 就不除弊了.
用圖示的方法則為:
case 3. | case 4.
合法執行(權限滿足) | 合法執行(權限滿足)
未經身份認證 | 已經身份認證
----------------------------+------------------------
case 1. | case 2.
非法執行(權限不足) | 非法執行(權限不足)
未經身份認證 | 已經身份認證
系統在處理用戶傳送過來的request時, 至少要處理兩項參數: 用戶身份認證
資料(若存在, 則存在session中), 以及負責運作執行的script_name
ex: http://myweb.xxx.xxx/user_list.php
script_name 就是 user_list.php
設計的流程大致如下:
//1 該script_name是否無需身份認證? (存在於 public_menu.txt 中)
//1.1 是, 執行之. (case 3.)
//1.2 否, 該用戶在session中是否留有登入時身份認證成功的資料(敏感資料除外)?
//1.2.1 是, 檢查script_name是否存在於其所屬群組所對應的menu樣板當中?
//1.2.1.1 是, 執行之. (case 4.)
//1.2.1.2 否, 判斷為非法執行, 進行相關處理. (case 2.)
//1.2.2 否, 將流程導入到 login 畫面. (case 1.)
※ 引述《sdallan ()》之銘言:
: 大約簡述一下面板,分左右兩頁框。
: 左框放置"功能"、右框顯示"結果"。
: 左框的"功能"為 超鏈結文字 (藍色的文字,點下去就執行功能)
: 基本的構想是,在資料庫中做權限設定
: 資料庫欄位,list(name,id) 。
: 資料大概為 新增學生,1。
: 更改學生,2。
: 用迴圈下去跑印出所有的列出來 = ="
: 即變成 超鏈結文字=> 新增學生
: 基本上都有設session。 會把權限在登入時載入session中,
: 如果使用者得知超鏈結想偷跑進去,我會先從session中做判斷,做攔劫。
: 問題在這:
: 想問,有什麼辦法可以直接在迴圈內加上判斷,
: 使用者有權限,再印出超鏈結文字?
: 在使用者資料表內做更大的規劃欄位? 有更好的方法嗎@@?
: 還請板上的高手指教。
: 在板上受教不少,借這個機會順便謝一下。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.104.186.105
※ 編輯: bobju 來自: 59.104.186.105 (04/27 10:56)
推
04/27 11:03, , 1F
04/27 11:03, 1F
→
04/27 11:03, , 2F
04/27 11:03, 2F
→
04/27 11:04, , 3F
04/27 11:04, 3F
→
04/27 11:05, , 4F
04/27 11:05, 4F
→
04/27 11:13, , 5F
04/27 11:13, 5F
※ 編輯: bobju 來自: 59.104.186.105 (04/27 11:35)
→
04/27 11:35, , 6F
04/27 11:35, 6F
討論串 (同標題文章)
完整討論串 (本文為第 4 之 4 篇):