-
Notifications
You must be signed in to change notification settings - Fork 453
/
AssignableObjectTrait.php
52 lines (47 loc) · 1.8 KB
/
AssignableObjectTrait.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
namespace Concrete\Core\Permission;
use Concrete\Core\Entity\User\User;
use Concrete\Core\Permission\Access\Access;
use Concrete\Core\Permission\Access\Entity\Entity;
use Concrete\Core\Permission\Access\Entity\GroupCombinationEntity;
use Concrete\Core\Permission\Access\Entity\GroupEntity;
use Concrete\Core\Permission\Access\Entity\UserEntity;
use Concrete\Core\Permission\Key\Key;
trait AssignableObjectTrait
{
public function assignPermissions(
$userOrGroup,
$permissions = [],
$accessType = Key::ACCESS_TYPE_INCLUDE,
$cascadeToChildren = true
) {
if (!$cascadeToChildren) {
$this->setChildPermissionsToOverride();
}
$this->setPermissionsToOverride();
if (is_array($userOrGroup)) {
$pe = GroupCombinationEntity::getOrCreate($userOrGroup);
// group combination
} elseif ($userOrGroup instanceof User || $userOrGroup instanceof \Concrete\Core\User\UserInfo || $userOrGroup instanceof \Concrete\Core\User\User) {
$pe = UserEntity::getOrCreate($userOrGroup);
} elseif ($userOrGroup instanceof Entity) {
$pe = $userOrGroup;
} else {
// group;
$pe = GroupEntity::getOrCreate($userOrGroup);
}
foreach ($permissions as $pkHandle) {
$pk = Key::getByHandle($pkHandle);
$pk->setPermissionObject($this);
$pa = $pk->getPermissionAccessObject();
if (!is_object($pa)) {
$pa = Access::create($pk);
} elseif ($pa->isPermissionAccessInUse()) {
$pa = $pa->duplicate();
}
$pa->addListItem($pe, false, $accessType);
$pt = $pk->getPermissionAssignmentObject();
$pt->assignPermissionAccess($pa);
}
}
}