1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
accesspermissiontable.php
См. документацию.
1<?php
2
9
10namespace Bitrix\Main\Access\Permission;
11
12use Bitrix\Main\Localization\Loc;
13use Bitrix\Main\NotSupportedException;
14use Bitrix\Main\ORM\Data\Result;
15use Bitrix\Main\ORM\Event;
16use Bitrix\Main\Access\Entity\DataManager;
17use Bitrix\Main\ORM\Fields;
18use Bitrix\Main\ORM\EntityError;
19
20Loc::loadMessages(__FILE__);
21
22abstract class AccessPermissionTable extends DataManager
23{
24 public static function getMap()
25 {
26 return [
27 new Fields\IntegerField('ID', [
28 'autocomplete' => true,
29 'primary' => true
30 ]),
31 new Fields\IntegerField('ROLE_ID', [
32 'required' => true
33 ]),
34 new Fields\StringField('PERMISSION_ID', [
35 'required' => true
36 ]),
37 new Fields\IntegerField('VALUE', [
38 'required' => true
39 ])
40 ];
41 }
42
43 public static function checkFields(Result $result, $primary, array $data)
44 {
45 parent::checkFields($result, $primary, $data);
46
47 if (!$result->isSuccess(true))
48 {
49 return;
50 }
51
52 if (!static::checkDataFields($data))
53 {
54 if (empty($primary))
55 {
56 $result->addError(new EntityError(Loc::getMessage('ACCESS_PERMISSION_PARENT_VALIDATE_ERROR')));
57 return;
58 }
59 $data = static::loadUpdateRow($primary, $data);
60 }
61
62 if (!static::validateRow($data))
63 {
64 $result->addError(new EntityError(Loc::getMessage('ACCESS_PERMISSION_PARENT_VALIDATE_ERROR')));
65 }
66 }
67
68 public static function addMulti($rows, $ignoreEvents = false)
69 {
70 throw new NotSupportedException();
71 }
72
73 public static function updateMulti($primaries, $data, $ignoreEvents = false)
74 {
75 throw new NotSupportedException();
76 }
77
78 public static function onAfterAdd(Event $event)
79 {
80 $primary = $event->getParameter("primary");
81 $data = $event->getParameter("fields");
82
84
85 parent::onAfterAdd($event);
86 }
87
88 public static function onAfterUpdate(Event $event)
89 {
90 $primary = $event->getParameter("primary");
91 $data = $event->getParameter("fields");
92
94
95 parent::onAfterUpdate($event);
96 }
97
98 protected static function updateChildPermission($primary, array $data)
99 {
100 $connection = static::getEntity()->getConnection();
101 $helper = $connection->getSqlHelper();
102
103 $data = static::loadUpdateRow($primary, $data);
104 if ((int) $data['VALUE'] === PermissionDictionary::VALUE_YES)
105 {
106 return;
107 }
108 $sql = "
109 UPDATE ". $helper->quote(static::getTableName()) ."
110 SET VALUE = ". PermissionDictionary::VALUE_NO ."
111 WHERE
112 ROLE_ID = ". $data['ROLE_ID'] ."
113 AND PERMISSION_ID LIKE '". $data['PERMISSION_ID'] .".%'
114 ";
115 $connection->query($sql);
116 }
117
118 protected static function loadUpdateRow($primary, array $data)
119 {
120 if (!static::checkDataFields($data))
121 {
122 $row = static::getRowById($primary);
123 foreach ($row as $k => $v)
124 {
125 if (!array_key_exists($k, $data))
126 {
127 $data[$k] = $v;
128 }
129 }
130 }
131 return $data;
132 }
133
134 protected static function validateRow(array $data): bool
135 {
136 if ((int) $data['VALUE'] === PermissionDictionary::VALUE_NO)
137 {
138 return true;
139 }
140
141 $parentPermissions = PermissionDictionary::getParentsPath($data['PERMISSION_ID']);
142 if (!$parentPermissions)
143 {
144 return true;
145 }
146
147 $res = static::getList([
148 'select' => ['VALUE'],
149 'filter' => [
150 '=ROLE_ID' => (int) $data['ROLE_ID'],
151 '%=PERMISSION_ID' => $parentPermissions,
153 ],
154 'limit' => 1
155 ])->fetchAll();
156
157 if (is_array($res) && !empty($res))
158 {
159 return false;
160 }
161
162 return true;
163 }
164
165 protected static function checkDataFields(array $data)
166 {
167 $fields = static::getMap();
168 foreach ($fields as $field)
169 {
170 if (!$field->hasParameter('required'))
171 {
172 continue;
173 }
174 if (
175 !array_key_exists($field->getName(), $data)
176 || !$data[$field->getName()]
177 )
178 {
179 return false;
180 }
181 }
182
183 return true;
184 }
185}
$connection
Определения actionsdefinitions.php:38
static updateChildPermission($primary, array $data)
Определения accesspermissiontable.php:98
static updateMulti($primaries, $data, $ignoreEvents=false)
Определения accesspermissiontable.php:73
static addMulti($rows, $ignoreEvents=false)
Определения accesspermissiontable.php:68
static loadUpdateRow($primary, array $data)
Определения accesspermissiontable.php:118
static checkFields(Result $result, $primary, array $data)
Определения accesspermissiontable.php:43
static getParentsPath(string $permissionId)
Определения permissiondictionary.php:116
Определения event.php:5
$data['IS_AVAILABLE']
Определения .description.php:13
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$result
Определения get_property_values.php:14
$event
Определения prolog_after.php:141
$rows
Определения options.php:264
$k
Определения template_pdf.php:567
$fields
Определения yandex_run.php:501