- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/provider/templateprovider.php
- Класс: BitrixTasksProviderTemplateProvider
- Вызов: TemplateProvider::makeAccessSql
private function makeAccessSql(): self
{
if (!$this->userId)
{
return $this;
}
$isAdmin = (array_key_exists('USER_IS_ADMIN', $this->arParams) ? $this->arParams['USER_IS_ADMIN'] : User::isSuper($this->userId));
if ($isAdmin)
{
return $this;
}
$query = [];
$permissions = $this->getPermissions();
// user can view department's templates
$departmentMembers = $this->getDepartmentMembers();
if (
!empty($departmentMembers)
&& in_array(PermissionDictionary::TEMPLATE_DEPARTMENT_VIEW, $permissions)
)
{
$query[] = 'TT.CREATED_BY IN ('. implode(',', $departmentMembers) .')';
}
// non department's templates
if (in_array(PermissionDictionary::TEMPLATE_NON_DEPARTMENT_VIEW, $permissions))
{
$query[] = 'TT.CREATED_BY NOT IN ('. (!empty($departmentMembers) ? implode(',', $departmentMembers) : 0) .')';
}
// individual rights
$accessCodes = $this->getUserModel()->getAccessCodes();
if (!empty($accessCodes))
{
$this->strFrom .= "nLEFT JOIN ". TasksTemplatePermissionTable::getTableName() . " TTP ON TTP.TEMPLATE_ID = TT.ID";
$query[] = '
TTP.ACCESS_CODE IN ("'. implode('","', $accessCodes) .'")
AND TTP.PERMISSION_ID IN ('. PermissionDictionary::TEMPLATE_VIEW .', '. PermissionDictionary::TEMPLATE_FULL .')
';
}
if (empty($query))
{
$this->arSqlSearch[] = '(1 = 0)';
}
else
{
$this->arSqlSearch[] = '((' . implode(') OR (', $query) . '))';
}
return $this;
}