- Модуль: sender
- Путь к файлу: ~/bitrix/modules/sender/lib/security/role/manager.php
- Класс: BitrixSenderSecurityRoleManager
- Вызов: Manager::setRolePermissions
static function setRolePermissions($roleId = null, array $roleFields = [], array $permissions)
{
$roleId = (int) $roleId;
if ($roleId <= 0 && empty($roleFields))
{
throw new ArgumentException('Role id should be greater than zero', 'roleId');
}
if(RoleTable::getRowById($roleId))
{
if (!empty($roleFields))
{
$result = RoleTable::update($roleId, $roleFields);
if (!$result->isSuccess())
{
return $result;
}
}
}
else
{
$result = RoleTable::add($roleFields);
if (!$result->isSuccess())
{
return $result;
}
$roleId = $result->getId();
}
$normalizedPermissions = Permission::normalize($permissions);
ModelRolePermissionTable::deleteByRoleId($roleId);
foreach ($normalizedPermissions as $entity => $actions)
{
foreach ($actions as $action => $permission)
{
$result = ModelRolePermissionTable::add(array(
'ROLE_ID' => $roleId,
'ENTITY' => $entity,
'ACTION' => $action,
'PERMISSION' => $permission
));
if (!$result->isSuccess())
{
return $result;
}
}
}
self::clearMenuCache();
$result = new AddResult();
$result->setId($roleId);
return $result;
}