- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/classes/general/task.php
- Класс: CTasks
- Вызов: CTasks::__GetSearchPermissions
static function __GetSearchPermissions($arTask)
{
$arPermissions = [];
// check task members
if (!isset($arTask['ACCOMPLICES']) || !isset($arTask['AUDITORS']))
{
if (!isset($arTask['ACCOMPLICES']))
{
$arTask['ACCOMPLICES'] = [];
}
if (!isset($arTask['AUDITORS']))
{
$arTask['AUDITORS'] = [];
}
$members = self::getMembers($arTask['ID']);
$arTask['ACCOMPLICES'] = array_merge($arTask['ACCOMPLICES'], $members[MemberTable::MEMBER_TYPE_ACCOMPLICE]);
$arTask['AUDITORS'] = array_merge($arTask['AUDITORS'], $members[MemberTable::MEMBER_TYPE_AUDITOR]);
}
// group id is set, then take permissions from socialnetwork settings
if ($arTask["GROUP_ID"] > 0 && CModule::IncludeModule("socialnetwork"))
{
$prefix = "SG" . $arTask["GROUP_ID"] . "_";
$letter = CSocNetFeaturesPerms::GetOperationPerm(SONET_ENTITY_GROUP, $arTask["GROUP_ID"], "tasks",
"view_all");
switch ($letter)
{
case "N"://All
$arPermissions[] = 'G2';
break;
case "L"://Authorized
$arPermissions[] = 'AU';
break;
case "K"://Group members includes moderators and admins
$arPermissions[] = $prefix . 'K';
case "E"://Moderators includes admins
$arPermissions[] = $prefix . 'E';
case "A"://Admins
$arPermissions[] = $prefix . 'A';
break;
}
}
// if neither "all users" nor "authorized user" enabled, turn permissions on at least for task members
if (!in_array("G2", $arPermissions) && !in_array("AU", $arPermissions))
{
if (!$arTask["ACCOMPLICES"])
{
$arTask["ACCOMPLICES"] = [];
}
if (!$arTask["AUDITORS"])
{
$arTask["AUDITORS"] = [];
}
$arParticipants = array_unique(array_merge([$arTask["CREATED_BY"], $arTask["RESPONSIBLE_ID"]],
$arTask["ACCOMPLICES"], $arTask["AUDITORS"]));
foreach ($arParticipants as $userId)
{
$arPermissions[] = "U" . $userId;
}
$arDepartments = [];
$arSubUsers = array_unique([$arTask['RESPONSIBLE_ID'], $arTask['CREATED_BY']]);
foreach ($arSubUsers as $subUserId)
{
$arUserDepartments = CTasks::GetUserDepartments($subUserId);
if (is_array($arUserDepartments) && count($arUserDepartments))
{
$arDepartments = array_merge($arDepartments, $arUserDepartments);
}
}
$arDepartments = array_unique($arDepartments);
$arManagersTmp = CTasks::GetDepartmentManagers($arDepartments);
if (is_array($arManagersTmp))
{
$arManagers = array_keys($arManagersTmp);
// Remove $arSubUsers from $arManagers
$arManagers = array_diff($arManagers, $arSubUsers);
foreach ($arManagers as $userId)
{
if (!in_array("U" . $userId, $arPermissions))
{
$arPermissions[] = "U" . $userId;
}
}
}
}
// adimins always allowed to view search result
$arPermissions[] = 'G1';
return $arPermissions;
}