/** * Checks an array of permissions against an accessor using the socialgraph between the * accessor and actor. * * @param ComActorsDomainEntityActor $actor The actor who's trying to perform an operation * @param array $permissions An array of permissions * @param ComActorsDomainEntityActor $owner If one of the permision * * @return bool */ public function checkPermissions($actor, $permissions, $owner) { $result = true; //all must be false in order to return false foreach ($permissions as $value) { $value = pick($value, self::GUEST); switch ($value) { //public case self::GUEST: $result = true; break; //registered //registered case self::REG: $result = !$actor->guest(); break; //follower //follower case self::FOLLOWER: $result = $actor->following($owner) || $actor->leading($owner) || $actor->administrator($owner); break; //leader //leader case self::LEADER: $result = $actor->leading($owner) || $actor->administrator($owner); break; //mutual //mutual case self::MUTUAL: $result = $actor->mutuallyLeading($owner) || $actor->administrator($owner); break; case self::ADMIN: $result = $actor->administrator($owner); break; default: $result = $actor->id == $value; } if ($result === true) { break; } } return $result; }
/** * Add a follow requester to the actor * * @param ComActorsDomainEntityActor $requester * * @return void */ public function addRequester($requester) { $leader = $this->_mixer; if ($requester->following($leader)) { return false; } if ($leader->blocking($requester)) { return false; } $edge = $this->getService('repos:actors.request')->findOrAddNew(array('requester' => $requester, 'requestee' => $leader)); $edge->save(); $this->resetStats(array($leader, $requester)); }