1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
CollabExcludeRule.php
См. документацию.
1<?php
2
3declare(strict_types=1);
4
5namespace Bitrix\SocialNetwork\Collab\Access\Rule;
6
7use Bitrix\Main\Access\AccessCode;
8use Bitrix\Main\Access\AccessibleItem;
9use Bitrix\Main\Access\Rule\AbstractRule;
10use Bitrix\Socialnetwork\Collab\Permission\UserRole;
11use Bitrix\Socialnetwork\Permission\GroupAccessController;
12use Bitrix\Socialnetwork\Permission\GroupDictionary;
13use Bitrix\SocialNetwork\Collab\Access\CollabAccessController;
14use Bitrix\SocialNetwork\Collab\Access\CollabDictionary;
15use Bitrix\SocialNetwork\Collab\Access\Model\CollabModel;
16
18{
20 protected $controller;
21
22 public function execute(AccessibleItem $item = null, $params = null): bool
23 {
24 if (!$item instanceof CollabModel)
25 {
26 $this->controller->addError(static::class, 'Wrong instance');
27
28 return false;
29 }
30
31 $deleteMembers = $item->getDeleteMembers();
32
33 $deleteMemberIds = array_map(
34 static fn(string $accessCode): int => (new AccessCode($accessCode))->getEntityId(),
35 $deleteMembers,
36 );
37
38 if (
39 in_array($item->getOwnerId(), $deleteMemberIds, true)
40 && !$this->controller->check(CollabDictionary::LEAVE, $item, $params)
41 )
42 {
43 $this->controller->addError(static::class, 'Access denied by owner role');
44
45 return false;
46 }
47
48 $currentMembers = $item->getDomainObject()?->getMemberIdsWithRole();
49
50 $members = [];
51 foreach ($currentMembers as $userId => $role)
52 {
53 if (!in_array($userId, $deleteMemberIds, true))
54 {
55 continue;
56 }
57
58 $members[$role][] = $userId;
59 }
60
61 foreach ($members as $role => $userIds)
62 {
63 if (!$this->canExclude($item, $userIds, $role))
64 {
65 $this->controller->addError(static::class, 'Access denied by group controller');
66
67 return false;
68 }
69 }
70
71 if (empty($members))
72 {
73 $this->controller->addError(static::class, 'Access denied by members role');
74
75 return false;
76 }
77
78 return true;
79 }
80
81 private function canExclude(CollabModel $item, array $userIds, string $targetRole): bool
82 {
83 $map = [
84 UserRole::REQUEST => GroupDictionary::DELETE_OUTGOING_REQUEST,
85 UserRole::MEMBER => GroupDictionary::EXCLUDE,
86 UserRole::MODERATOR => GroupDictionary::REMOVE_MODERATOR,
87 ];
88
89 $rule = $map[$targetRole] ?? GroupDictionary::EXCLUDE;
90
91 foreach ($userIds as $userId)
92 {
93 if (
94 !$this->controller->forward(
95 GroupAccessController::class,
96 $rule,
97 $item,
98 ['userId' => $userId],
99 )
100 )
101 {
102 $this->controller->addError(static::class, 'Access denied by group controller');
103
104 return false;
105 }
106 }
107
108 return true;
109 }
110}
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
execute(AccessibleItem $item=null, $params=null)
Определения CollabExcludeRule.php:22
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$map
Определения config.php:5
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799