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

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

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

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

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

  

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

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

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

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

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

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

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

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

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

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

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

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

    КонецЕсли;

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

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

См. также

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

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

1. ninch Иванов (ninch) 44 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) 161 13.08.12 16:06 Сейчас в теме
(2) kapustinag, Спасибо за коммент!
Но на самом деле не шибко я понял, что Вы написали (видимо выходные сказываются) :) Суть такова: если у пользователь состоит в группе, то он и не сможет записать этот объект.
Например:
-Запрет на запись Справочников
-- Номенклатура

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

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

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

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

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

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

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