2namespace Bitrix\Landing;
4use \Bitrix\Landing\Internals\RightsTable;
5use \Bitrix\Main\Localization\Loc;
6use \Bitrix\Main\UserAccessTable;
7use Bitrix\Crm\Service\Container;
9Loc::loadMessages(__FILE__);
37 'unexportable' =>
'unexportable',
38 'knowledge_menu24' =>
'knowledge_menu24',
39 'knowledge_admin' =>
'knowledge_admin',
40 'knowledge_create' =>
'knowledge_create',
41 'knowledge_unexportable' =>
'knowledge_unexportable',
42 'knowledge_extension' =>
'knowledge_extension',
43 'group_create' =>
'group_create',
44 'group_admin' =>
'group_admin',
45 'group_menu24' =>
'group_menu24',
46 'group_unexportable' =>
'group_unexportable',
47 'mainpage_create' =>
'mainpage_create',
57 'knowledge_unexportable',
91 self::$available =
false;
100 self::$available =
true;
109 self::$globalAvailable =
false;
118 self::$globalAvailable =
true;
128 defined(
'LANDING_DISABLE_RIGHTS') &&
129 LANDING_DISABLE_RIGHTS ===
true
134 if (!self::$globalAvailable)
138 return self::$available;
147 if (self::hasAdditionalRight(self::ADDITIONAL_RIGHTS[
'admin'],
null,
false,
true))
160 return self::$allowedSites;
170 self::$userId =
$uid;
179 self::$userId =
null;
192 return self::$userId;
216 $res = \CTask::getList(
218 [
'MODULE_ID' =>
'landing']
220 while ($row =
$res->fetch())
222 $row[
'NAME'] = mb_substr($row[
'NAME'], 14);
223 $tasks[$row[
'ID']] = $row;
240 foreach (self::getAccessTasks() as $accessTask)
242 $tasks[$accessTask[
'NAME']] = $accessTask[
'ID'];
257 if (self::isFeatureOn())
259 $res = RightsTable::getList([
265 '=ENTITY_TYPE' => $entityType
268 while ($row =
$res->fetch())
270 RightsTable::delete($row[
'ID']);
284 self::ENTITY_TYPE_SITE
309 '=ENTITY_TYPE' => $entityType
313 $filter[
'=ACCESS_CODE'] = array_keys($preDefined);
317 $res = RightsTable::getList([
324 while ($row =
$res->fetch())
326 $codes[] = $row[
'ACCESS_CODE'];
327 if (!isset(
$items[$row[
'ACCESS_CODE']]))
329 $row[
'TASK_ID'] = [$row[
'TASK_ID']];
330 $items[$row[
'ACCESS_CODE']] = $row;
334 $items[$row[
'ACCESS_CODE']][
'TASK_ID'][] = $row[
'TASK_ID'];
336 if (isset($preDefined[$row[
'ACCESS_CODE']]))
338 unset($preDefined[$row[
'ACCESS_CODE']]);
345 foreach ($preDefined as $accessCode => $rightCode)
348 'TASK_ID' => $rightCode,
349 'ACCESS_CODE' => $accessCode
351 $codes[] = $accessCode;
357 $codesNames =
$access->getNames($codes);
358 foreach (
$items as &$item)
360 if (isset($codesNames[$item[
'ACCESS_CODE']]))
362 $item[
'ACCESS_PROVIDER'] = (
363 isset($codesNames[$item[
'ACCESS_CODE']][
'provider']) &&
364 $codesNames[$item[
'ACCESS_CODE']][
'provider']
366 ? $codesNames[$item[
'ACCESS_CODE']][
'provider']
368 $item[
'ACCESS_NAME'] = isset($codesNames[$item[
'ACCESS_CODE']][
'name'])
369 ? $codesNames[$item[
'ACCESS_CODE']][
'name']
370 : $item[
'ACCESS_CODE'];
387 return self::getData(
389 self::ENTITY_TYPE_SITE,
404 $entityType == self::ENTITY_TYPE_SITE &&
408 $types = self::ACCESS_TYPES;
409 unset($types[self::ACCESS_TYPES[
'delete']]);
410 return array_values($types);
415 $entityType == self::ENTITY_TYPE_SITE
420 if ($scopeOperationsSite !==
null)
422 return array_values($scopeOperationsSite);
427 $operationsDefault = [];
429 $uid = self::getContextUserId();
430 $extendedMode = self::isExtendedMode();
437 self::isFeatureOn() &&
443 if (is_array($entityIdFilter))
445 $entityIdFilter[] = 0;
454 'ENTITY_ID' => $entityIdFilter,
455 '=ENTITY_TYPE' => $entityType,
456 'USER_ACCESS.USER_ID' =>
$uid,
457 '!TASK_OPERATION.OPERATION.NAME' =>
false
467 $res = RightsTable::getList(
471 'OPERATION_NAME' =>
'TASK_OPERATION.OPERATION.NAME'
476 while ($row =
$res->fetch())
478 if ($row[
'ENTITY_ID'] == 0)
480 $operationsDefault[] = mb_substr($row[
'OPERATION_NAME'], 8);
483 if (!isset($operations[$row[
'ENTITY_ID']]))
485 $operations[$row[
'ENTITY_ID']] =
array();
487 $operations[$row[
'ENTITY_ID']][] = mb_substr($row[
'OPERATION_NAME'], 8);
488 $operations[$row[
'ENTITY_ID']] = array_unique($operations[$row[
'ENTITY_ID']]);
495 if (!isset($operations[$id]))
497 if ($wasChecked && !$extendedMode)
499 $operations[$id] = !empty($operationsDefault)
501 : [self::ACCESS_TYPES[
'denied']];
505 $operations[$id] = array_values(self::ACCESS_TYPES);
528 return self::getOperations(
530 self::ENTITY_TYPE_SITE
548 static $operations = [];
551 if (!is_string($accessType))
556 if (!isset($operations[
$siteId]))
558 if (
$siteId === 0 || !self::isOn() || Site::ping(
$siteId, $deleted))
560 $operations[
$siteId] = self::getOperations(
562 self::ENTITY_TYPE_SITE
571 return in_array($accessType, $operations[
$siteId]);
582 static $operations = [];
583 $landingId = intval($landingId);
585 if (!is_string($accessType))
590 if (!isset($operations[$landingId]))
598 '=SITE.DELETED' => [
'Y',
'N'],
599 '=DELETED' => [
'Y',
'N']
605 $operations[$landingId] = self::getOperations(
607 self::ENTITY_TYPE_SITE
612 $operations[$landingId] = [];
616 return in_array($accessType, $operations[$landingId]);
628 if (!self::isFeatureOn())
633 $tasks = self::getAccessTasksReferences();
642 foreach (
$rights as $accessCode => $rightCodes)
644 $rightCodes = (
array) $rightCodes;
645 if (in_array(self::ACCESS_TYPES[
'denied'], $rightCodes))
647 $rightCodes = [self::ACCESS_TYPES[
'denied']];
649 else if (!in_array(self::ACCESS_TYPES[
'read'], $rightCodes))
651 $rightCodes[] = self::ACCESS_TYPES[
'read'];
654 foreach ($rightCodes as $rightCode)
656 if (isset($tasks[$rightCode]))
660 'ENTITY_TYPE' => $entityType,
661 'TASK_ID' => $tasks[$rightCode],
662 'ACCESS_CODE' => $accessCode
683 return self::setOperations(
685 self::ENTITY_TYPE_SITE,
701 static $exist =
null;
706 $res = RightsTable::getList([
711 ? [
'=ROLE.TYPE' =>
$type]
715 $exist = (bool)
$res->fetch();
733 self::isFeatureOn() &&
737 $tasks = self::getAccessTasksReferences();
738 $extendedRights = self::isExtendedMode();
739 $uid = self::getContextUserId();
747 'RIGHTS.USER_ACCESS.USER_ID' =>
$uid
750 '=RIGHTS.TASK_ID' => null
757 if ($additionalFilterOr)
763 'RIGHTS.USER_ACCESS.USER_ID' =>
$uid
801 if (self::isFeatureOn())
804 $current = ($current ==
'Y') ?
'N' :
'Y';
816 if (!self::isFeatureOn())
822 foreach (self::ADDITIONAL_RIGHTS as
$right)
828 $res = Role::getList([
830 'ID',
'ACCESS_CODES',
'ADDITIONAL_RIGHTS'
833 while ($row =
$res->fetch())
835 $row[
'ACCESS_CODES'] = (
array) $row[
'ACCESS_CODES'];
836 $row[
'ADDITIONAL_RIGHTS'] = (
array) $row[
'ADDITIONAL_RIGHTS'];
837 foreach ($row[
'ADDITIONAL_RIGHTS'] as
$right)
859 isset($additionalRights[
$code]) &&
860 is_array($additionalRights[
$code])
863 foreach ($additionalRights[
$code] as
$i => $accCodes)
881 \CBitrixComponent::clearComponentCache(
896 if (!is_string(
$code))
900 self::refreshAdditionalRights([
917 if (!is_string(
$code))
929 $codesNames =
$access->getNames($accessCodes);
931 foreach ($accessCodes as
$code)
933 if (isset($codesNames[
$code]))
936 isset($codesNames[
$code][
'provider']) &&
937 $codesNames[
$code][
'provider']
939 ? $codesNames[
$code][
'provider']
942 ? $codesNames[
$code][
'name']
965 foreach (self::ADDITIONAL_RIGHTS as
$right)
967 if (mb_strpos(
$right,
'_') > 0)
969 [$prefix, ] = explode(
'_',
$right);
970 $prefix = mb_strtoupper($prefix);
971 if ($prefix !=
$type)
976 else if (
$type !==
null)
993 if (\
Bitrix\
Main\Loader::includeModule(
'crm'))
995 $crmUserPermissions = Container::getInstance()->getUserPermissions(self::getContextUserId());
996 if ($crmUserPermissions->webForm()->canEdit())
999 $res = Site::getList([
1004 '%=CODE' =>
'/' .
Site\Type::PSEUDO_SCOPE_CODE_FORMS .
'%',
1006 'CHECK_PERMISSIONS' =>
'N'
1009 while ($row =
$res->fetch())
1011 self::$allowedSites[] = $row[
'ID'];
1031 if ($checkExtraRights && self::hasExtraRights())
1036 if (!is_string(
$code))
1049 if (
$type == mb_strtolower(
Site\Type::SCOPE_CODE_MAINPAGE))
1056 if (array_key_exists(
$code, self::ADDITIONAL_RIGHTS))
1058 if (!self::isFeatureOn())
1063 if (!self::getContextUserId())
1070 if (in_array(
$code, self::REVERSE_RIGHTS))
1085 if (!is_array(
$option) && !$strict)
1095 if (self::isExtendedMode())
1108 foreach (
$option as $roleAccess)
1110 $accessCodes = array_merge($accessCodes, (
array)$roleAccess);
1112 $accessCodes = array_unique($accessCodes);
1117 static $accessCodesStatic = [];
1120 $accessCodesStr = implode(
'|', $accessCodes);
1122 if (array_key_exists($accessCodesStr, $accessCodesStatic))
1124 return $accessCodesStatic[$accessCodesStr];
1127 $res = UserAccessTable::getList([
1132 '=ACCESS_CODE' => $accessCodes,
1133 'USER_ID' => self::getContextUserId()
1136 $accessCodesStatic[$accessCodesStr] = (boolean)
$res->fetch();
1137 return $accessCodesStatic[$accessCodesStr];
if(!Loader::includeModule('messageservice')) $provider
static getOption($code, $default=null)
const FEATURE_PERMISSIONS_AVAILABLE
static setOption($code, $value)
static checkFeature(string $feature, array $params=array())
static hasAccessForLanding($landingId, $accessType)
static setAdditionalRightExtended($code, array $accessCodes=[])
static setOperationsForSite($siteId, array $rights=[])
static removeDataForSite($siteId)
static setContextUserId(int $uid)
static getOperations($entityId, $entityType)
static setOperations($entityId, $entityType, array $rights=[])
static removeData($entityId, $entityType)
static getAccessFilter(array $additionalFilterOr=[])
static getAccessTasksReferences()
static getDataForSite($siteId, array $preDefined=[])
static getOperationsForSite($siteId)
static getAdditionalRightExtended($code)
static clearContextUserId()
static getAdditionalRightsLabels()
static getData($entityId, $entityType, array $preDefined=[])
static hasAdditionalRight($code, $type=null, bool $checkExtraRights=false, bool $strict=false)
static hasAccessForSite($siteId, $accessType, $deleted=false)
static refreshAdditionalRights(array $additionalRights=[])
static getContextUserId()
static getExpectedRoleIds()
static getOperationsForSite(int $siteId)
static getCurrentScopeId()
static getList(array $parameters=array())
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
if(!is_array($deviceNotifyCodes)) $access