我应该什么时候回来?
我正在努力为存储在数据库中的部分创建一个访问对象。 这是一个过程的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
任何人都可以帮助我何时返回真或假? 提前致谢。
PS - 用户可以是Mods和Admins
编辑:我试图使用in_array()
,但仍然不确定何时返回值true
或false
因为如果第二个方法运行它会覆盖。
我想到了。 首先,检查用户是否已经使用占位符( $this->_state
)进行身份验证。 然后检查用户的类型并检查它是否在范围内。
class Priverlidges {
private $_state = false;
public function canView($type, Scope $scope) {
if(!$this->_state && $type & User::IS_ADMIN && in_array(User::IS_ADMIN, $scope->getPrivilidges())) {
$this->_state = true;
}
if(!$this->_state && $type & User::IS_MODERATOR && in_array(User::IS_MODERATOR, $scope->getPrivilidges())) {
$this->_state = true;
}
if(!$this->_state && $type & User::IS_MEMBER && in_array($scope->getPrivilidges(), User::IS_MEMBER)) {
$this->_state = true;
}
return $this->_state;
}
}
链接地址: http://www.djcxy.com/p/58873.html