我正在實施一個類來管理我的網站上的用戶權限。棘手的類設計問題
例如:員工可以查看客戶記錄,但沒有別的,僱主可以查看客戶以及管理員工,管理員既可以做這些事情,也可以管理僱主。
到目前爲止,我所得到的是:
我已經存儲的權限列表,如
addCustomer
,delCustomer
等每個權限被鏈接到用戶角色的列表,它被允許執行該操作。我已經建立了一個簡單的權限類。我使用的是這樣的:
if($ permissions-> can('addCustomer')) echo「Add Customer」; else echo'不允許添加客戶';
然而,棘手的部分是,在一些地方,我需要更具體。例如:客戶已獲得許可:readMsgs
,允許他閱讀他和員工之間的消息。但是,如果他有這個權限,那麼他就可以簡單地從改變網址:
site.com/messages/read/100
到
site.com/messages/read/101
而且讀消息#101爲好,這可能是另一種客戶和員工之間。除了自己之外,客戶不應該能夠閱讀任何人的消息。
同樣,客戶已經拿到了editCustomer
許可,允許他前往編輯自己的個人資料:
site.com/customers/99
(其中99是其客戶ID)
但如果他去 site.com/customers/100
他不應該被允許訪問該頁面。
我該如何解決這個問題?理想情況下,我希望能夠將ID傳遞給權限類。例如:
if (! $permissions->can('readMsg', $msgId))
echo 'not allowed';
if (! $permissions->can('editCustomer', $requestedCustomerId))
echo 'not allowed';
任何想法我將不得不重構我的類結構以允許上述類型的東西?
我知道Java,所以隨時輸入,如果那會更容易。但問題是,班級如何知道它是否要求從員工X讀取消息給客戶X,或者是否要求編輯客戶X的個人資料?在這兩種情況下,一旦類知道它是哪一個,它就可以檢查當前用戶是否是客戶Y,在這種情況下請求將被拒絕。 – 2011-04-23 00:20:50
我不確定我是否瞭解後續問題的性質。你的請求如何不知道? 'messages/read/XYZ'很清楚地定義了行爲。 – corsiKa 2011-04-23 01:41:37