2014-01-29 55 views
0

我需要在PHP的系統將使用在網頁上,但並不是所有的用戶幾個環節都讓這些取決於哪個組的用戶日誌中看到:PHP訪問控制列表的鏈接

  1. 客人 - 可寫在留言簿東西,但可能不會改變他們
  2. 員工 - 可能會造成客人,看到酒店預訂和改變的留言
  3. 經理 - 他們可能每一個環節可用的內容。

但鏈接不能分散,必須包含在主頁中,如果您不在正確的組中,則必須隱藏鏈接。

有人可以舉一個例子來說明如何在PHP中完成這樣的事情,或者讓我朝着正確的方向發展嗎?

+0

到目前爲止,你做了什麼嗎? –

+0

使用條件語句並使用'WHERE id ='something'AND something_else!='some_var'' - 假設您將使用數據庫,毫無疑問。對此有影響的東西。 –

+0

歡迎來到Stack Overflow!請注意,標籤是獨立的,不能合併來創建概念。結合'[access]'和'[control]'並不意味着與單個'[access-control]'標籤相同的東西。請務必閱讀選擇標籤時出現的有用說明! – Charles

回答

1

給每個用戶一個號碼以標識他們屬於哪個類別。例如,客人可以是1,員工是2,管理員是3.然後,當他們登錄時,將其存儲在會話中。

要顯示任何給定類別的鏈接,您可以執行此操作。只需更改每個類別的號碼。

<?php if($_SESSION[ 'user' ][ 'category' ] == 3) : ?> 
    <a href="www.google.co.uk">Link for a manager</a> 
<?php endif; ?> 
1

假設你有設置已經用戶角色和某種類的,你可以很容易地做到這一點:

if($users->role($userid) == "some role") //can be int or string which ever way you set it up 
    { 
     echo "a href='somelink.php'> Click to access</a>"; 
    } 
2

你所尋找的是經常refered爲AC (access control)。其中一個最受歡迎的是RBAC (role based access control),因爲它允許您將用戶/帳戶分組,併爲這些組提供某些權限。

讓我們通過一個最小安裝的設計步驟:

基本上你說的話是,你有某種賬戶​​已經爲你的用戶(除客戶,因爲這是一個不登錄用戶) 現在RBA中的角色是基本上是有或沒有某些特權的組。

這樣會導致以下關係:

  • 零到多個賬戶屬於零到多個角色( - >組例如,「管理」,「經理人」等)
  • 零到多個角色擁有零到許多特權/權限(例如「訪問管理器部分」或「更新此記錄」)

現在讓我們繼續,爲實現該系統的哪個部分需要哪些數據它

  • 通常,您在每個帳戶的帳戶表上都有一個ID。
  • 角色通常具有ID和名稱。
  • 特權通常至少有一個類似於常量的標識符(它應該是主鍵,因此它是唯一的 - 例如ACCESS_MANAGER - 您可以在下面的代碼示例中瞭解爲什麼這是有用的。它可以用來查找)和名稱

這導致下面的表格:

Account(AccountID (PK), ...) 
Account_Role(AccountID (PK, FK), RoleID (PK, FK)) 
Role(RoleID (PK), name) 
Role_Privilege(RoleID (PK, FK), PrivilegeID (PK, FK)); 
Privilege(identify (PK), name) 

現在,您可以管理角色和權限的這些角色都有。 如果你想檢查,如果當前用戶有特定的權限,你可以問你的數據庫,例如。

if(
    $this 
    ->getCurrentUser() //would return a dummy guest user with no roles assigned if no user is logged in 
    ->hasPrivilege('ACCESS_MANAGER') //joins account via account_role to role to role_privilege and finally to privilege 
) { /*display only links a manager would see*/ } 

if($this->getCurrentUser()->hasPrivilege('ACCESS_ADMIN')) { /*display only links an admin would see*/ } 

PS:維基提供的文章都很理論。您可能只想Google查詢「php訪問控制系統」或類似的查詢,以便讓您開始使用其他人提出的解決方案。