因此,我想要做的是讓我可以覆蓋已經在角色中作爲標準設置的權限,所以即使用戶是角色的一部分。我可以去找一個特定的用戶,並告訴他他不允許使用這個特定的權限,即使他的角色允許他做這個特定的事情,反之亦然!具有權限的角色,但也添加/刪除個人用戶的權限
在我的數據庫中,我有以下tabels。
users:
- fk_role_id
- ...
permissions:
- perm_id
- perm_name
- perm_key
role_rights:
- fk_role_id
- fk_perm_id
user_rights:
- fk_usr_id
- fk_perm_id
- allow
打破我的代碼下來:
所以第一和關閉我想作一個數組,在那裏我可以存儲所有我的權限。所以我可以使用if(in_array())來允許人們使用某些內容。
$g_permissions = array();
在這裏,我加入我的role_rights包含什麼樣的角色有哪些權限,在這裏我得到的權限與特定ID的角色包含。
$query = "SELECT * FROM role_rights
INNER JOIN permissions ON fk_perm_id = perm_id
WHERE fk_role_id = $roleID";
$roleArray = new DBfetch($query);
是$ roleArray創建數組:包含它有一個讓行,要麼可以包含0或1,如果它包含0的特殊權利
role_rights - DBfetch Object
(
[row] => Array
(
[0] => Array
(
[fk_role_id] => 1
[fk_perm_id] => 1
[perm_id] => 1
[perm_name] => Admin Panel: Panel Access
[perm_key] => panel_access
)
[1] => Array
(
[fk_role_id] => 1
[fk_perm_id] => 2
[perm_id] => 2
[perm_name] => Admin Panel: Create a user
[perm_key] => panel_create_user
)
[2] => Array
(
[fk_role_id] => 1
[fk_perm_id] => 3
[perm_id] => 3
[perm_name] => Admin panel: Edit a user
[perm_key] => panel_edit_user
)
)
[num_rows] => 3
)
在這裏,我加入我的USER_RIGHTS它意味着它是一個應該被刪除的權限,如果它包含1,那麼它應該被添加到數組中。
$query = "SELECT * FROM user_rights
INNER JOIN permissions ON fk_perm_id = perm_id
WHERE fk_usr_id = $userID";
$userArray = new DBfetch($query);
數組的$ userArray創建:
user_rights - DBfetch Object
(
[row] => Array
(
[0] => Array
(
[fk_usr_id] => 2
[fk_perm_id] => 3
[allow] => 0
[perm_id] => 3
[perm_name] => Admin panel: Edit a user
[perm_key] => panel_edit_user
)
[1] => Array
(
[fk_usr_id] => 2
[fk_perm_id] => 4
[allow] => 1
[perm_id] => 4
[perm_name] => Admin panel: Delete a user
[perm_key] => panel_delete_user
)
)
[num_rows] => 2
)
第一的foreach應該運行$ roleArray有牽強的一切,它給我發回的一個對象,數組我通過這個陣列運行和secound一樣。因此,如果數組發現與其他表的外鍵匹配的外鍵,那麼只要添加額外的權限或將其從數組中移除,它就會拒絕訪問。
foreach($roleArray->row as $key=>$value) {
foreach($userArray->row as $key2=>$value2) {
if($value["fk_perm_id"] == $value2["fk_perm_id"]) {
if($value2["allow"] == 1) {
$g_permissions[$value2['perm_id']] = $value2['perm_key'];
}else{
unset($g_permissions[$value2["perm_id"]]);
}
} else {
$g_permissions[$value['perm_id']] = $value['perm_key'];
}
}
}
那麼我要求什麼,是一個解決方案。到目前爲止,還沒有,但兩個問題,我不能添加或從特定用戶刪除權限..
所有代碼:
$g_permissions = array();
$query = "SELECT * FROM role_rights
INNER JOIN permissions ON fk_perm_id = perm_id
WHERE fk_role_id = $roleID";
$roleArray = new DBfetch($query);
$query = "SELECT * FROM user_rights
INNER JOIN permissions ON fk_perm_id = perm_id
WHERE fk_usr_id = $userID";
$userArray = new DBfetch($query);
foreach($roleArray->row as $key=>$value) {
foreach($userArray->row as $key2=>$value2) {
if($value["fk_perm_id"] == $value2["fk_perm_id"]) {
if($value2["allow"] == 1) {
$g_permissions[$value2['perm_id']] = $value2['perm_key'];
}else{
unset($g_permissions[$value2["perm_id"]]);
}
} else {
$g_permissions[$value['perm_id']] = $value['perm_key'];
}
}
}
請編輯同時顯示陣列的內容的一個例子,和所需輸出 – Steve
@Steve更新,我需要的一切出來! – Athax