iT邦幫忙

1

PHP 登入後如何判別權限?

php

各位先進好
小弟參考了下列網址做了一個登入頁面
http://james670818.pixnet.net/blog/post/2337519-%5Bphp%5D-%E8%A3%BD%E4%BD%9C%E7%99%BB%E5%85%A5%E9%A0%81%E9%9D%A2

但我目前都是做個別登入的動作

例如
A網頁一個登入頁面,資料庫為susersA
B網頁一個登入頁面,資料庫為susersB
C網頁一個登入頁面,資料庫為susersC

如果再A B C網頁放在一起
如何在susersA裡的帳號登入時只能看見A網頁的東西,susersB裡的帳號登入時只能看見B網頁的東西。
或是有更好的做法 請指教,謝謝。

0
窮嘶發發發
iT邦高手 1 級 ‧ 2016-08-03 09:11:56

透過 帳號判別啊,可以直接用 IF 函式寫出哪個帳號只能存取哪個資料庫
或是建立一個 USER 資料庫然後把USER 可以存取的資料庫寫清楚
這樣USER 登入後只要一查詢資料庫,就能知道 USER 可以存取哪個資料庫了

請問這段程式碼寫完是放入LOGIN那一頁裡嗎?

是放在資料查詢頁面吧
一個資料庫也許幾千個表
幾千個表也許有幾百個表單
每個表單都要設定好USER 要去查詢哪個資料庫啊
這在每個表單前面都要先定義好的
Login 之後是透過 COOKIE 或 SESSION 確認 USER 已經登入了
然後自然你要設定一些系統常數,來讓後續的程式使用
當然你也可以直接把 USER 可以查詢哪個資料庫放到 SESSION 或 COOKIE 裡面
但不太建議這麼做

一個簡單的表單權限管理系統如下

  1. USER 表格:紀錄 USER 帳號、密碼、相關資料
  2. 表單表格:記錄表單項目、表單路徑、表單相關資料
  3. 權限表格:權限種類 ( 查詢、新增、修改、刪除 )
  4. 表單權限表格:表單項目、使用者、權限
  5. 資料庫表格:資料庫名稱
  6. 資料庫權限:資料庫名稱、使用者、權限

上面是根據你想要的方式,進行簡單的資料表格推演
但一般來說,大多數的系統,除非必要,很少為單一使用者建立資料庫
而是針對表單進行權限控管,至於資料庫,在一般的ERP 系統
大多是用來建立公司單位來使用的,而上述1~6表單,會放在系統管理的資料庫內
當前端載入 表單時,就會去載入當前使用者有什麼權限,如無權限,會自動顯示警告
若有權限,則自動顯示使用者可以操作的項目,這是很基本的表單設計概念
有興趣可以自行去找相關書籍來看看,或是參考一下別人寫好的系統
相關的資料流程該如何定義,對你的設計會有所幫助的

4
做工仔人!
iT邦高手 1 級 ‧ 2016-08-03 09:27:48

修改方式:

1.先建一個TABLE : 功能登入驗證及權限管理. 所以這個TABLE 至少要有三個欄位: 登入帳號,使用者名稱,權限.

2.新增一個登入網頁, 當USER登入時,先檢查帳號/密碼後,再將"權限"讀到變數中.語法:
session_register("AdminRights");
$_SESSION['AdminRights']=explode(",",$rs['權限']);

3.在目前的網頁最前面增加權限判斷.
if( ! in_array("8",$_SESSION['AdminRights'])){
提示"無權限"
RETURN 回登入畫面
}

謝謝,來試試

1
fillano
iT邦超人 1 級 ‧ 2016-08-03 13:36:21

建議用「角色」來管理權限,這樣會比較有彈性。

你需要定義幾個東西:

  1. 權限:在你的例子中,可能是資料庫A、資料庫B、資料庫C
  2. 角色:角色擁有權限,例如你可以定義以下角色,以覆蓋你的完整可能需求
  3. A:資料庫A
  4. B:資料庫B
  5. C:資料庫C
  6. AB:資料庫A跟資料庫B
  7. BC:資料庫B跟資料庫C
  8. AC:資料庫A跟資料庫C
  9. ABC:三個權限都有
  10. 帳號:帳號擁有角色,現在系統簡單,可以先考慮帳號跟角色是一對一的關係

經由帳號就可以知道他擁有的角色,經由角色就可以知道他擁有的權限,經由權限就可以知道他是否可以存取目前的頁面。

一個帳號擁有多個角色會比較麻煩,在某些操作需要提昇或者說轉換角色。就像Windows的UAC或是Unix的sudo一樣,某些操作需要管理者權限時,他會提示你確認以取得權限。一般的操作就是使用一般使用者的權限。

這種設計方式,有個專有名詞叫做RBAC(role base access control)...維基上也查的到,還有美國的國家標準XD,不過建議先不要管他,因為有點小複雜,怕你反而越弄越不清楚。

謝謝,所以關鍵字是 RBAC ??

fillano iT邦超人 1 級 ‧ 2016-08-04 09:07:56 檢舉

我要發表回答

立即登入回答