andreyryabin / sprint.migration

Миграции для разработчиков (1С-Битрикс)
http://marketplace.1c-bitrix.ru/solutions/sprint.migration/
MIT License
170 stars 55 forks source link

Добавить расширенное управление правами инфоблоков #140

Open andreyryabin opened 6 days ago

andreyryabin commented 6 days ago

автор Il'ia Kartovitskii

пример кода

public function up()
  {
    if( !\CModule::includeModule( "iblock" ) )
      return false;

    $arTasks = \CTask::getList( [], [ "MODULE_ID" => "iblock" ] );
    $taskIds = [];

    while( $task = $arTasks->fetch() )
      $taskIds[ $task["NAME"] ] = $task["ID"];

    foreach( $this->codes as $code )
    {
      $iblockId = $this->helper->Iblock()->updateIblockIfExists( $code, [ 'RIGHTS_MODE' => 'E' ] );

      $newRights = [
        [ 'GROUP' => 'administrators', 'PERM' => 'iblock_full' ],
        [ 'GROUP' => 'everyone', 'PERM' => 'iblock_read' ]
      ];

      $setRights = [];
      foreach( $newRights as $i => $arRight )
      {
        $groupId = \CGroup::GetIDByCode( $arRight['GROUP'] );
        if( empty( $groupId ) || empty( $taskIds[ $arRight['PERM'] ] ) )
          return false;

        $setRights[ 'n' . $i ] = [
          'GROUP_CODE' => "G$groupId",
          'DO_INHERIT' => 'Y',
          'TASK_ID' => $taskIds[ $arRight['PERM'] ]
        ];
      }

      ( new \CIBlockRights( $iblockId ) )->SetRights( $setRights );

      $arElementForm = $this->helper->UserOptions()->exportElementForm( $iblockId );
      $arElementForm['Доступ|cedit1']['RIGHTS'] = 'Права доступа к элементу';
      $this->helper->UserOptions()->saveElementForm( $iblockId, $arElementForm );
    }
  }