- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/classes/general/task.php
- Класс: CTasks
- Вызов: CTasks::getPermissionFilterConditions
static function getPermissionFilterConditions($arParams,
$behaviour = ['ALIAS' => '', 'USE_PLACEHOLDERS' => false])
{
if (!is_array($behaviour))
{
$behaviour = [];
}
if (!isset($behaviour['ALIAS']))
{
$behaviour['ALIAS'] = '';
}
if (!isset($behaviour['USE_PLACEHOLDERS']))
{
$behaviour['USE_PLACEHOLDERS'] = false;
}
$arSubSqlSearch = [];
$fields = [];
$a = $behaviour['ALIAS'];
$b = $behaviour;
$f =& $fields;
if (!is_array($arParams))
{
$arParams = [];
}
if (array_key_exists('USER_ID', $arParams) && ($arParams['USER_ID'] > 0))
{
$userID = (int)$arParams['USER_ID'];
}
else
{
$userID = User::getId();
}
if (array_key_exists('TASK_MEMBER_JOINED', $arParams) && $arParams['TASK_MEMBER_JOINED'])
{
$taskMemberJoined = true;
}
else
{
$taskMemberJoined = false;
}
if (!User::isSuper($userID))
{
// subordinate check
$arParams['FIELDS'] =& $fields;
if ($strSql = CTasks::GetSubordinateSql($a, $arParams, $behaviour))
{
$arSubSqlSearch[] = "EXISTS(" . $strSql . ")";
}
// group permission check
if (
$arAllowedGroups = IntegrationSocialNetworkGroup::getIdsByAllowedAction(
'view_all',
true,
($arParams['USER_ID'] ?? null)
)
)
{
$arSubSqlSearch[] =
'('
. static::placeFieldSql('GROUP_ID', $b, $f)
. ' IN ('
. implode(',', $arAllowedGroups)
. '))'
;
}
if (!$taskMemberJoined || ($taskMemberJoined && !empty($arSubSqlSearch)))
{
$arSubSqlSearch[] = static::placeFieldSql('CREATED_BY', $b, $f) . " = '" . $userID . "'";
$arSubSqlSearch[] = static::placeFieldSql('RESPONSIBLE_ID', $b, $f) . " = '" . $userID . "'";
$arSubSqlSearch[] =
"EXISTS(
SELECT 'x'
FROM b_tasks_member "
. $a
. "TM
WHERE
"
. $a
. "TM.TASK_ID = "
. static::placeFieldSql('ID', $b, $f)
. " AND "
. $a
. "TM.USER_ID = '"
. $userID
. "'
)";
}
}
return [$arSubSqlSearch, $fields];
}