我应该什么时候回来?

我正在努力为存储在数据库中的部分创建一个访问对象。 这是一个过程的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() ,但仍然不确定何时返回值truefalse因为如果第二个方法运行它会覆盖。


我想到了。 首先,检查用户是否已经使用占位符( $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

上一篇: When should I return?

下一篇: Do all php types return a bool?