gifts2017

Запрет на запись документов/справочников/РегистрСведений (ТолькоПросмотр)

Опубликовал Konstantin Konstantin (KonstB) в раздел Администрирование - Защита, права, пароли

Частенько приходится слушать от руководства: "запретить этому пользователю, запись этого документа\справочника"... А через какое-то время, почему тот-то не может записать справочник/документ. Вот и родилась идея оперативного запрета/разрешения записи документа/справочника/рс.

Навеяно: Простой доступ только для чтения.

Данное решение работоспособно в типовых решениях, где присутсвует справочник "ГруппыПользователей".

  

Алгоритм механизма следующий:

1. Создаются подписки на событие ПередЗаписью на все документы/справочники/рс (в чем есть необходимость).

2. В справочнике "ГруппыПользователей" создается элемент, например: "Запрет на запись документа".

3. Далее, в эту группу ("Запрет на запись документа")  добавляются элементы, для которых необходимо запретить запись, с именем = Имя справочника/документа/рс .

4. В обработчтике подписки на событие вставляем код:

    ИмяОбъекта = Источник.Метаданные().Имя;

   
ГруппаЗапрета = Справочники.ГруппыПользователей.НайтиПоНаименованию("Запрет на запись документов", Истина);

   
ОбъектЗапрета = Справочники.ГруппыПользователей.НайтиПоНаименованию(ИмяОбъекта, Истина, ГруппаЗапрета);

    Если НЕ
ОбъектЗапрета = Справочники.ГруппыПользователей.ПустаяСсылка() Тогда
       
Запрос = Новый Запрос;
       
Запрос.Текст = "ВЫБРАТЬ
        |   ГруппыПользователейПользователиГруппы.Ссылка
        |ИЗ
        |   Справочник.ГруппыПользователей.ПользователиГруппы КАК ГруппыПользователейПользователиГруппы
        |ГДЕ
        |   ГруппыПользователейПользователиГруппы.Пользователь = &Пользователь
        |   И ГруппыПользователейПользователиГруппы.Ссылка = &Ссылка"
;

       
Запрос.УстановитьПараметр("Пользователь", ПараметрыСеанса.ТекущийПользователь);
       
Запрос.УстановитьПараметр("Ссылка", ОБъектЗапрета);

       
Результат = Запрос.Выполнить();

        Если НЕ
Результат.Пустой() Тогда
           
Отказ = Истина
        КонецЕсли;

    КонецЕсли;

В итоге имеем механизм, оперативного запрета/разрешения записи любого документа/справочника/РегистраСведений.

P.S. У данного решения остается вопрос с производительность при большом докуметообороте и включенном РЛС. Протестировать пока не представляется возможным.

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

0. Konstantin Konstantin (KonstB) 09.08.12 22:36
Частенько приходится слушать от руководства: "запретить этому пользователю, запись этого документа\справочника"... А через какое-то время, почему тот-то не может записать справочник/документ. Вот и родилась идея оперативного запрета/разрешения записи документа/справочника/рс.

Перейти к публикации

1. ninch (ninch) 13.08.12 09:24
Довольно не плохой способ ограничения прав. При случае надо проверить в деле:)
2. Александр Капустин (kapustinag) 13.08.12 10:50
Нужно на всякий случай проверить вот что:
- Остальные группы "разрешительные", а эти - "запретительные".
- Через шаблонные ограничения доступа, указанные в ролях, пользователь может получить доступ к тем же документам, что и остальные члены всех групп, в которые он входит.
- Рассмотренный механизм добавляет (потенциально) еще много пересечений пользователя с другими пользователями. В смысле - пользователь может быть членом нескольких разрешительных групп, наряду с, например, 20 своими коллегами. А теперь он стал еще членом нескольких запретительных групп, наряду с 10 нарушителями каких-то там правил.
- В результате этот пользователь или другие нарушители могут незапланированно получить доступ к тем документам (не видам документов, а именно конкретным документам), к которым не получали доступ через разрешительные группы.

То есть опасность эта может быть, если включен и настроен доступ на уровне записей. Или если доступ регулируется другими (самодельными) механизмами, но с использованием вызовов функции ГруппыТекущегоПользователя().
3. Александр Капустин (kapustinag) 13.08.12 11:05
Как уже отметили в обсуждении темы "Простой доступ только для чтения", есть еще один вариант, сравнимый с этим:
- Использовать не группы, а дополнительные права пользователя. В этом случае можно одной строкой запретить и группе целиком, а не только одному пользователю.
4. Konstantin Konstantin (KonstB) 13.08.12 16:06
(2) kapustinag, Спасибо за коммент!
Но на самом деле не шибко я понял, что Вы написали (видимо выходные сказываются) :) Суть такова: если у пользователь состоит в группе, то он и не сможет записать этот объект.
Например:
-Запрет на запись Справочников
-- Номенклатура

если пользователь включен в группу номен., то он и не запишет туда ничего.

По сути если даже есть, какой-то свой механизм или ограничения на уровне записей, то нахождение пользователя в группе вызовет Отказ записи, и запись произведена не будет (данный механизм ограничивает только Запись).

(3) kapustinag, До этого места я не дочитал. Вариант предложенный AuroraNorilsk мне больше нравится. Что-то я не подумал(до читал) об этом.
5. Александр Капустин (kapustinag) 13.08.12 21:46
(4) KonstB, Наверно, я слишком косноязычен.
Я имел в виду, что, если включены ограничения на уровне записей, либо используются иные способы, проверяющие членство в "разрешительных" группах, то может быть отрицательный побочный эффект из-за этих "запретительных" групп.

То, что мы собирались запретить с помощью членства в "запретительной" группе - будет запрещено, тут я ничего не оспариваю.
Побочный эффект может заключаться в том, что, например, пользователь Вася получит доступ на просмотр не только тех документов "Реализация товаров и услуг", которые делал Петя (Вася и Петя находятся в одной разрешительной группе), но и к тем документам, которые делал Гриша (Вася и Гриша находятся в одной запретительной группе).

Но, может быть, во многих ИБ ничего такого не произойдет.
6. Александр Че (chmod660) 15.08.12 14:23
кроме упомянутых неоднозначностей, второй момент:
если я правильно понял, имена метаданных - это подгруппы в вашей группе запрета?
тогда что произойдет, если есть одноименные метаданные, и я захочу одно запретить, а другое разрешить?
например, справочник "СобытияОС" и регистр сведений "СобытияОС" ?
7. Вадим Никонов (V.Nikonov) 16.08.12 11:17
Способ относительно простой и достаточно эффективный. Единственное замечание по реализации: Раз уж начали править Конфу, то эффективнее, вместо поиска (тем более по Наименованию), использовать Предопределённые значения. Соглашусь с (3) kapustinag
Использовать не группы, а дополнительные права пользователя
это заметно нагляднее при объявленной постановке задачи.

Теперь по потребности в подобных закрытиях... Гораздо чаще, включают условные запреты, Например, Номенклатуру "из этой группы" можно править, а "в другие не лезь"... Или на одном Складе можно проводить документы, а на другом нельзя!
Полные же запреты на виды действий, чаще "лечатся присвоением Роли с ограничением"...
8. Konstantin Konstantin (KonstB) 17.08.12 11:56
(6) chmod660, Да все верно, имена метаданных - это подгруппы в группе запрета.
ОбъектЗапрета ищется по родителю. Т.е. если отрабатывается подписка на событие ПередЗаписью документов, предполагается, что существует группа "Запрет на запись документов" (соот. для подписки на справочник группа "Запрет на запись справочников") - данный метод отсекет НЕ уникальность имен в различных метаданных.

(7) V.Nikonov, Спасибо, про предопределенные, что то не подумал :)
Если необходим, такой детальный запрет, то да это только ограничения по записям, предложенный мною механизм не годится.
9. itt (itt) 25.08.12 00:04
как вариант надо будет проверить
10. Татьяна Шулдикова (taasha25) 17.06.13 09:34
Коллега!
Способ понравился, как раз то, что искала. Необходим доступ только на чтение всех данных.
Сейчас буду тестировать.
11. Галина Галина (a4a) 22.10.13 16:01
Интересный вариант, если использовать группы пользователей. Но, как правило, в базе бывает несколько пользователей с полными правами и каждый из них может вмешаться и изменить группы в режиме предприятия. В конфигуратор, как правило, все же заходят далеко не все. Хотя это, наверное, частная проблема.
12. Александр Раевский (ray-xp) 28.11.13 09:06
Спасибо за идею, использовать справочник "ГруппыПользователей"!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа