0
我正在努力爲存儲在數據庫中的部分創建一個訪問對象。這是一個過程的skellington,它包含靜態數據,直到我能夠得到原理的工作。我應該什麼時候回來?
class User {
const IS_ADMIN = 1;
const IS_MODERATOR = 2;
const IS_MEMBER = 4;
}
該類將最終自動從數據庫加載數據,但暫時該類具有默認值。
class Scope {
private $priv = [];
public function __construct() {
$this->priv = [1];
}
public function getPrivilidges() {
return $this->priv;
}
}
這是它混亂的地方,我可以告訴第二個和第三個條件不能滿足,如果第一個失敗,我怎麼能阻止呢?
class Priverlidges {
public function canView($type, Scope $scope) {
if($type & User::IS_ADMIN) {
foreach($scope->getPrivilidges() as $p) {
if($p == User::IS_ADMIN) continue;
return false;
}
return true;
}
if($type & User::IS_MODERATOR) {
foreach($scope->getPrivilidges() as $p) {
if($p == User::IS_MODERATOR) continue;
return false;
}
return true;
}
if($type & User::IS_MEMBER) {
foreach($scope->getPrivilidges() as $p) {
if($p == User::IS_MEMBER) continue;
return false;
}
return true;
}
}
}
實施例使用時的priverlidge的默認值是1的正常工作:
echo (int)(new Priverlidges)->canView(User::IS_ADMIN, new Scope());
實施例使用時的priverlidge的默認值是2的正常工作:
echo (int)(new Priverlidges)->canView(User::IS_MODERATOR | User::IS_ADMIN, new Scope()); // it returns false at the first condition
任何人都可以幫助我何時返回真或假?提前致謝。
P.S - 用戶既可以是MODS和管理員
編輯:我曾嘗試使用in_array()
仍不能確定何時返回值true
或false
,因爲它得到,如果第二個方法運行的覆蓋。
我不太明白理想的邏輯。如果它不存在於$ scope-> getPrivilidges()'中,你想跳過一個'User'常量的檢查嗎? –
它是一個RBAC控制器,每個角色都有訪問權限表的權限。由於只有,並且只會有3個用戶組。我只是硬編碼組。代碼(最終會)查詢'Scope'對象中的權限,然後開發人員可以輕鬆檢查用戶是否有權限控制器/視圖。例如,MOD控制面板。但是,當然,這仍然需要改變,因爲有讀取,寫入和編輯範圍。 @RuslanOsmanov – KDOT