Permission::check PHP Method

check() public method

権限チェックを行う
public check ( array $url, string $userGroupId ) : boolean
$url array
$userGroupId string
return boolean
    public function check($url, $userGroupId)
    {
        if ($this->permissionsTmp === -1) {
            $conditions = array('Permission.user_group_id' => $userGroupId);
            $permissions = $this->find('all', array('conditions' => $conditions, 'order' => 'sort', 'recursive' => -1));
            if ($permissions) {
                $this->permissionsTmp = $permissions;
            } else {
                $this->permissionsTmp = array();
                return true;
            }
        }
        $permissions = $this->permissionsTmp;
        if ($url != '/') {
            $url = preg_replace('/^\\//is', '', $url);
        }
        $adminPrefix = Configure::read('Routing.prefixes.0');
        $url = preg_replace("/^{$adminPrefix}\\//", 'admin/', $url);
        // ダッシュボード、ログインユーザーの編集とログアウトは強制的に許可とする
        $allows = array('/^admin$/', '/^admin\\/$/', '/^admin\\/dashboard\\/.*?/', '/^admin\\/dblogs\\/.*?/', '/^admin\\/users\\/logout$/', '/^admin\\/user_groups\\/set_default_favorites$/');
        $sessionKey = Configure::read('BcAuthPrefix.admin.sessionKey');
        if (!empty($_SESSION['Auth'][$sessionKey]['id'])) {
            $allows[] = '/^admin\\/users\\/edit\\/' . $_SESSION['Auth'][$sessionKey]['id'] . '$/';
        }
        foreach ($allows as $allow) {
            if (preg_match($allow, $url)) {
                return true;
            }
        }
        $ret = true;
        foreach ($permissions as $permission) {
            if (!$permission['Permission']['status']) {
                continue;
            }
            if ($permission['Permission']['url'] != '/') {
                $pattern = preg_replace('/^\\//is', '', $permission['Permission']['url']);
            } else {
                $pattern = $permission['Permission']['url'];
            }
            $pattern = addslashes($pattern);
            $pattern = str_replace('/', '\\/', $pattern);
            $pattern = str_replace('*', '.*?', $pattern);
            $pattern = '/^' . str_replace('\\/.*?', '(|\\/.*?)', $pattern) . '$/is';
            if (preg_match($pattern, $url)) {
                $ret = $permission['Permission']['auth'];
            }
        }
        return (bool) $ret;
    }

Usage Example

 public function init()
 {
     parent::init();
     if (!Director::is_cli() && !Permission::check("ADMIN") && $_SERVER['REMOTE_ADDR'] != $_SERVER['SERVER_ADDR']) {
         return Security::permissionFailure();
     }
 }
All Usage Examples Of Permission::check