/** * Determine if one or more rules are allowed * * @param string $rule Rule identifier. * @param string $resource (optional) Resource identifier. * @param string $resourceId (optional) Resource id. * @return boolean */ public function can($rule, $resource = null, $resourceId = null) { // Validate is super user if ($this->isSuperUser()) { return true; } // Permissions array $managerPermissions = $this->getPermissions(); // Check rule exists if ($this->rules->hasRule($rule)) { $rule = $this->rules->getRule($rule); if ($resource && $rule->hasResource($resource)) { $resource = $rule->getResource($resource); if ($resource->hasIds() && $resourceId) { return isset($managerPermissions[$rule->getRule()][$resource->getType()]) && in_array($resourceId, $managerPermissions[$rule->getRule()][$resource->getType()]); } return isset($managerPermissions[$rule->getRule()][$resource->getType()]) && !empty($managerPermissions[$rule->getRule()][$resource->getType()]); } return isset($managerPermissions[$rule->getRule()]) && !empty($managerPermissions[$rule->getRule()]); } return false; }