1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
userfieldpermissiontable.php
См. документацию.
1<?php
2
3namespace Bitrix\Main\UserField\Access\Permission;
4
5use Bitrix\Main\Access\Permission\AccessPermissionTable;
6use Bitrix\Main\ORM\Fields;
7use Bitrix\Main\ORM\Query\Query;
8use Bitrix\Main\ORM\Query\Join;
9use Bitrix\Main\ORM\Fields\Relations\Reference;
10use Bitrix\Main\UserAccessTable;
11use Bitrix\Main\UserFieldTable;
12
30{
31 private const PERMISSION_ALLOWED = 1;
32
33 public static function getTableName()
34 {
35 return 'b_user_field_permission';
36 }
37
38 public static function getObjectClass()
39 {
40 return UserFieldPermission::class;
41 }
42
43 public static function getMap()
44 {
45 return [
46 new Fields\IntegerField('ID', [
47 'autocomplete' => true,
48 'primary' => true
49 ]),
50 new Fields\IntegerField('ENTITY_TYPE_ID', [
51 'required' => true
52 ]),
53 new Fields\IntegerField('USER_FIELD_ID', [
54 'required' => true
55 ]),
56 new Fields\StringField('ACCESS_CODE', [
57 'required' => true
58 ]),
59 new Fields\StringField('PERMISSION_ID', [
60 'required' => true
61 ]),
62 new Fields\IntegerField('VALUE', [
63 'required' => true
64 ]),
65 (new Reference(
66 'USER_FIELD',
67 UserFieldTable::class,
68 Join::on('this.USER_FIELD_ID', 'ref.ID')
69 )),
70 new Reference(
71 'USER_ACCESS',
72 UserAccessTable::class,
73 Join::on('this.ACCESS_CODE', 'ref.ACCESS_CODE')
74 ),
75 ];
76 }
77
82 protected static function updateChildPermission($primary, array $data)
83 {
84 $data = self::loadUpdateRow($primary, $data);
85 if ((int)$data['VALUE'] === PermissionDictionary::VALUE_YES) {
86 return;
87 }
88 $sql = "
89 UPDATE `" . static::getTableName() . "`
90 SET VALUE = " . PermissionDictionary::VALUE_NO . "
91 WHERE
92 USER_FIELD_ID = " . $data['USER_FIELD_ID'] . "
93 AND ACCESS_CODE = " . $data['ACCESS_CODE'] . "
94 AND PERMISSION_ID LIKE '" . $data['PERMISSION_ID'] . ".%'
95 ";
96 static::getEntity()->getConnection()->query($sql);
97 }
98
103 public static function validateRow(array $data): bool
104 {
105 $parentPermissions = PermissionDictionary::getParentsPath($data['PERMISSION_ID']);
106 if (!$parentPermissions)
107 {
108 return true;
109 }
110
112 'select' => ['VALUE'],
113 'filter' => [
114 '=USER_FIELD_ID' => (int)$data['USER_FIELD_ID'],
115 '=ACCESS_CODE' => (int)$data['ACCESS_CODE'],
116 '%=PERMISSION_ID' => $parentPermissions,
118 ]
119 ]);
120
121 if (is_array($res) && count($res))
122 {
123 return false;
124 }
125
126 return true;
127 }
128
133 public static function getUserFieldsAccessCodes(int $entityTypeID): array
134 {
135 $query = new Query(self::getEntity());
136 $query->addSelect('USER_FIELD.FIELD_NAME', 'FIELD_NAME');
137 $query->addSelect('ACCESS_CODE');
138 $query->addSelect('USER_ACCESS.USER_ID', 'USER_ID');
139 $query->addSelect('USER_FIELD_ID');
140 $query->addFilter('=ENTITY_TYPE_ID', $entityTypeID);
141 $query->addFilter('=VALUE', self::PERMISSION_ALLOWED);
142 $query->whereNotNull('FIELD_NAME');
143
144 $dbResult = $query->exec();
145
146 return $dbResult->fetchAll();
147 }
148
156 public static function saveEntityConfiguration(
157 $accessCodes,
158 string $fieldName,
159 int $entityTypeId,
160 string $permissionId,
161 ?string $entityTypeName = null
162 ): void
163 {
164 if ($userField = self::getUserFieldId($fieldName, $entityTypeName))
165 {
166 self::removeEntityConfiguration($userField['ID'], $entityTypeId);
167 if (is_array($accessCodes))
168 {
169 foreach ($accessCodes as $accessCode)
170 {
174 $permission = self::createObject([
175 'ENTITY_TYPE_ID' => $entityTypeId,
176 'USER_FIELD_ID' => $userField['ID'],
177 'ACCESS_CODE' => $accessCode['ID'],
178 'PERMISSION_ID' => $permissionId,
179 'VALUE' => self::PERMISSION_ALLOWED
180 ]);
181 $permission->save();
182 }
183 }
184 }
185 }
186
191 private static function removeEntityConfiguration(int $userFieldId, int $entityTypeId): void
192 {
194 '=ENTITY_TYPE_ID' => $entityTypeId,
195 '=USER_FIELD_ID' => $userFieldId
196 ]);
197 }
198
204 private static function getUserFieldId(string $fieldName, ?string $entityId = null): ?array
205 {
206 $filter = ['=FIELD_NAME' => $fieldName];
207 if ($entityId)
208 {
209 $filter['=ENTITY_ID'] = $entityId;
210 }
211
213 'select' => ['ID'],
214 'filter' => $filter
215 ]);
216 }
217}
static deleteList(array $filter)
Определения datamanager.php:16
static loadUpdateRow($primary, array $data)
Определения accesspermissiontable.php:118
static getRow(array $parameters)
Определения datamanager.php:398
static createObject($setDefaultValues=true)
Определения datamanager.php:232
$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
$query
Определения get_search.php:11
$filter
Определения iblock_catalog_list.php:54
Определения chain.php:3
$entityId
Определения payment.php:4
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$dbResult
Определения updtr957.php:3