SimpleAcl\Acl::addRule PHP Method

addRule() public method

Assign $role, $resource and $action to added rule. If rule was already registered only change $role, $resource and $action for that rule. This method accept 1, 2, 3 or 4 arguments: addRule($rule) addRule($rule, $action) addRule($role, $resource, $rule) addRule($role, $resource, $rule, $action)
public addRule ( )
    public function addRule()
    {
        $args = func_get_args();
        $argsCount = count($args);
        $role = null;
        $resource = null;
        $action = null;
        if ($argsCount == 4 || $argsCount == 3) {
            $role = $args[0];
            $resource = $args[1];
            $rule = $args[2];
            if ($argsCount == 4) {
                $action = $args[3];
            }
        } elseif ($argsCount == 2) {
            $rule = $args[0];
            $action = $args[1];
        } elseif ($argsCount == 1) {
            $rule = $args[0];
        } else {
            throw new InvalidArgumentException(__METHOD__ . ' accepts only one, tow, three or four arguments');
        }
        if (!is_null($role) && !$role instanceof Role) {
            throw new InvalidArgumentException('Role must be an instance of SimpleAcl\\Role or null');
        }
        if (!is_null($resource) && !$resource instanceof Resource) {
            throw new InvalidArgumentException('Resource must be an instance of SimpleAcl\\Resource or null');
        }
        if (is_string($rule)) {
            $ruleClass = $this->getRuleClass();
            $rule = new $ruleClass($rule);
        }
        if (!$rule instanceof Rule) {
            throw new InvalidArgumentException('Rule must be an instance of SimpleAcl\\Rule or string');
        }
        if ($exchange = $this->hasRule($rule)) {
            $rule = $exchange;
        }
        if (!$exchange) {
            $this->rules[] = $rule;
        }
        if ($argsCount == 3 || $argsCount == 4) {
            $rule->setRole($role);
            $rule->setResource($resource);
        }
        if ($argsCount == 2 || $argsCount == 4) {
            $rule->setAction($action);
        }
    }

Usage Example

Example #1
0
 public function run()
 {
     try {
         new self();
         $acl = new SimpleAcl\Acl();
         foreach ($this->getUserGroupPerms() as $rows) {
             foreach ($rows as $key => $val) {
                 if (in_array($key, ['view', 'create', 'edit', 'delete'])) {
                     $acl->addRule(new SimpleAcl\Role($rows['name']), new SimpleAcl\Resource($rows['resource']), $key, $val);
                 }
             }
         }
         return $acl;
     } catch (Exception $e) {
         throw $e;
     }
 }
All Usage Examples Of SimpleAcl\Acl::addRule