[ENTITY][Actor] Basic check if can admin for remote actors
This commit is contained in:
parent
b7c82b9dcb
commit
9585472679
|
@ -152,6 +152,24 @@ class ActivityPub extends Plugin
|
|||
return Event::next;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fill Actor->canAdmin() for Actors that came from ActivityPub
|
||||
*/
|
||||
public function onFreeNetworkActorCanAdmin(Actor $actor, Actor $other, bool &$canAdmin): bool
|
||||
{
|
||||
// Are both in AP?
|
||||
if (
|
||||
!\is_null($ap_actor = ActivitypubActor::getByPK(['actor_id' => $actor->getId()]))
|
||||
&& !\is_null($ap_other = ActivitypubActor::getByPK(['actor_id' => $other->getId()]))
|
||||
) {
|
||||
// Are they both in the same server?
|
||||
$canAdmin = parse_url($ap_actor->getUri(), PHP_URL_HOST) === parse_url($ap_other->getUri(), PHP_URL_HOST);
|
||||
return Event::stop;
|
||||
}
|
||||
|
||||
return Event::next;
|
||||
}
|
||||
|
||||
/**
|
||||
* Overload core endpoints to make resources available in ActivityStreams 2.0
|
||||
*
|
||||
|
|
|
@ -517,22 +517,28 @@ class Actor extends Entity
|
|||
*/
|
||||
public function canAdmin(self $other): bool
|
||||
{
|
||||
switch ($other->getType()) {
|
||||
case self::PERSON:
|
||||
return $this->getId() === $other->getId();
|
||||
case self::GROUP:
|
||||
return Cache::get(
|
||||
self::cacheKeys($this->getId(), $other->getId())['can-admin'],
|
||||
function () use ($other) {
|
||||
try {
|
||||
return DB::findOneBy('group_member', ['group_id' => $other->getId(), 'actor_id' => $this->getId()])->getIsAdmin();
|
||||
} catch (NotFoundException) {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
);
|
||||
default:
|
||||
return false;
|
||||
if ($this->getIsLocal()) {
|
||||
switch ($other->getType()) {
|
||||
case self::PERSON:
|
||||
return $this->getId() === $other->getId();
|
||||
case self::GROUP:
|
||||
return Cache::get(
|
||||
self::cacheKeys($this->getId(), $other->getId())['can-admin'],
|
||||
function () use ($other) {
|
||||
try {
|
||||
return DB::findOneBy('group_member', ['group_id' => $other->getId(), 'actor_id' => $this->getId()])->getIsAdmin();
|
||||
} catch (NotFoundException) {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
$canAdmin = false;
|
||||
Event::handle('FreeNetworkActorCanAdmin', [$this, $other, &$canAdmin]);
|
||||
return $canAdmin;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user