IE2017

Расширенная настройка прав пользователей

Администрирование - Защита, права, пароли

Гибкая настройка прав пользователей в режиме Предприятие.
Подобных разработок много, но из существующих полностью не удовлетворила ни одна, поэтому изобрел свой "велосипед".
Позволяет ограничить доступ для отдельных пользователей (и групп пользователей) к конкретным видам метаданных (константы, справочники, документы) по различным видам доступа (дата запрета редактирования для каждого вида документа, ввод нового, редактирование, проведение/отмена проведения, пометка на удаление/снятие пометки и т.д.) с использованием иерархии.
Есть возможность назначить ответственных пользователей, которые могут редактировать права других пользователей. Отредактированные права начинают действовать немедленно - не требуется выход и повторный вход в базу 1С.
Возможно внедрение с минимальными изменениями конфигурации: одна новая константа, один новый справочник, изменение функций глобального модуля (без изменения кода модулей объектов метаданных)
Не использует никаких ВК.

Наиболее подходящая по идеологии оказалась эта разработка: //infostart.ru/projects/1034 (за что спасибо ее автору!)

Для доработки используемой вами конфигурации необходимо использовать выложенную здесь демо-конфигурацию. Демо-конфигурация сделана на базе типовой бухгалтерии 77, но легко внедряется в любые другие типовые и нетиповые конфигурации.

Порядок внедрения:

1) добавьте в используемую конфигурацию справочник Пользователи (рекомендуется его добавить через режим объединение конфигурации с моей демкой, чтобы импортировать картинки кнопок)

2) добавьте константу ПраваПользователяПоУмолчанию (можно копи-пастом)

3) Добавьте общие реквизиты документов Автор и ДатаСоздания. Внимание! После добавления переставьте имеющиеся общие реквизиты типа Строка неогр. длины (напр., "Комментарий") в конец списка общих реквизитов - это критично, если база SQL.

4) в глобальном модуле добавьте (измените, если уже существуют) следующие функции и процедуры (возьмите их из глоб. модуля моей демки):

глУстановкаТекущегоПользователя,
глНаборПравОбъекта,
глПолучитьПраво,
ПравоИзмененияДокумента,
глМожноЗаписатьЭлемент,
ПриУдаленииЭлемента,
глМожноПроводить,
ПриИзмененииВремениДокумента,
ДатаЗапретаРедактирования,
глПроверкаРазрешенияРедактирования,
глМожноЗаписатьДокумент,
ПриУдаленииДокумента,
ПриОтменеПроведенияДокумента,
ПриВыклВклПроводокОперации,
ПриЗаписиКонстанты,
ПриЗаписиИстории,
глДействия.

5) проверьте, что во всех документах есть процедуры ПриОткрытии и ПриЗаписи, в которых содержится следующий код (в типовой бух 77 он есть обязательно), в качестве примера см. документ Новый1 в моей демке:

Процедура ПриОткрытии()
ПриЗаписиПерепроводить(1);
глПроверкаРазрешенияРедактирования(Контекст); //<- используется с целью проверки Прав доступа

Если Форма.ТолькоПросмотр() = 1 Тогда
Форма.КнопкаОК.Доступность(0);
КонецЕсли;
//...
КонецПроцедуры

//_____________________________________________________________________________
Процедура ПриЗаписи() //предопределенная
Если глМожноЗаписатьДокумент(Контекст) = 0 Тогда //<- используется с целью проверки Прав доступа
СтатусВозврата(0);
Возврат;
КонецЕсли;

//....
КонецПроцедуры

6) в форме документа Операция измените процедуры ПриЗаписи и ПриОткрытии, руководствуясь примером документа Операция моей демки

7) в интерфейсе пользователей предусмотрите вызов справочника Пользователи

В принципе, это всё, что необходимо для минимальной доработки конфигурации, чтобы запустить Расширенную настройку прав доступа. Но при этом будет недоступна настройка некоторых прав, а именно:
для справочников: Ввод нового, Редактирование, Перенос в другую группу;
для документов: Проведение
(В коде модуля формы списка справочника Пользователи эти права у меня отмечены: //*)

Для того чтобы эти права стали доступными необходимо произвести более глубокие изменения конфигурации:

8) во всех формах списков всех справочников добавить (изменить) предопределенные процедуры ПриЗаписи и ПриПереносеВДругуюГруппу (в качестве примера см. в моей демке справочники Пользователи и Банки):

Процедура ПриЗаписи() //<- добавлено с целью проверки Прав доступа
Если глМожноЗаписатьЭлемент(Контекст) = 0 Тогда
СтатусВозврата(0);
Возврат;
КонецЕсли;
КонецПроцедуры

Процедура ПриПереносеЭлементаВДругуюГруппу(Элем, Группа) //<- добавлено с целью проверки Прав доступа
Если глМожноЗаписатьЭлемент(Контекст,"ПереносВДругуюГруппу") = 0 Тогда
СтатусВозврата(0);
Возврат;
КонецЕсли;
КонецПроцедуры

9) во всех формах элемента и группы всех справочников добавить (изменить) процедуры ПриЗаписи (тот же пример в моей демке)

Процедура ПриЗаписи()
Если глМожноЗаписатьЭлемент(Контекст) = 0 Тогда //<- добавлено с целью проверки Прав доступа
СтатусВозврата(0); //<- добавлено с целью проверки Прав доступа
Возврат; //<- добавлено с целью проверки Прав доступа
КонецЕсли; //<- добавлено с целью проверки Прав доступа
КонецПроцедуры // ПриЗаписи()

10) В модулях проведения всех документов в начале процедуры ОбработкаПроведения() добавить код (см. документ Новый1 в моей демке):

Если глМожноПроводить(Контекст) = 0 Тогда //<- добавлено с целью проверки Прав доступа
СтатусВозврата(0);
Возврат;
КонецЕсли;

11) Для большей красивости можно во всех журналах документов добавить графу Автор (см. пример Журналы документов - Общий), а на форме всех документов добавить надпись Автор (см. диалог формы документов Новый1 и Операция)

12) Во всех обработках, изменяющих объекты программно (например, в типовой бух 77 это обработки ОбработкаДокументов и ФормированиеНалоговыхДокументов) предусмотреть проверку расширенных прав пользователей (у меня такого примера пока не предусмотрено).
В частности, в типовых конфигурациях необходимо изменить обработку "ЗначенияПериодическихРеквизитов" - предусмотреть проверку прав пользователей при попытке удаления значений периодических реквизитов. Для этого в начале процедуры УдалитьЗначения() нужно добавить код:

 НаборПрав = глНаборПравОбъекта(глПользователь,"Справочник."+ТекущийОбъект.Вид());//начало //<- добавлено с целью проверки Прав доступа
 Если глПолучитьПраво(НаборПрав,"Редактирование")="-" тогда //запрещено
  Предупреждение("Нет прав редактировать это значение!");
  СтатусВозврата(0);
  Возврат  
 КонецЕсли; //конец //<- добавлено с целью проверки Прав доступа

Порядок использования:

Настройка прав пользователей осуществляется через вызов справочника Пользователи. При первом входе в систему создается новый элемент справочника, реквизиты Код и Наименование которого заполняются именем пользователя, заданным в конфигураторе. При этом если задана константа ПраваПользователяПоУмолчанию, то ему присваивается набор прав, заданных пользователю в этой константе.

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

Для каждого пользователя (группы пользователей) задан список объектов и права этих объектов.
Список объектов:
Общие, Константа, Справочник, Документ.

Объекту Общие соответствует только одно право (пока): Редактирование прав пользователей. Оно определяет, может ли данный пользователь системы заниматься установкой и редактированием прав пользователей (себя и других)

Объекту Константа соответствует право: Редактирование. Оно определяет право доступа сразу ко всем константам. Для того чтобы, это право установить для конкретных констант, надо развернуть объект Константа и кнопкой "+" добавить нужные имена констант. Т.о. права можно устанавливать в целом на объект и на виды данного объекта.

Объекту Справочник соответствуют права (знаком * отмечены права, которые недоступны при минимальной доработки конфигурации):
Ввод нового //*
Редактирование //*
Перенос в другую группу //*
Пометка на удаление
Снятие пометки на удаление.

Также как и для констант, можно задавать права и для конкретных видов справочников, добавляя их кнопкой "+". Установка этих прав для справочника Пользователи, по сути, дублирует право "Общие.РедактированиеПравПользователей".

Объекту Документ соответствуют права:
Дата запрета редакт.
Дней доступа
Доступ к чужим документам (автором которых Вы не являетесь)
Ввод нового
Редактирование проведенного
Редактирование непроведенного
Изменение времени
Проведение документа //*
Отмена проведения документа
Пометка на удаление
Снятие пометки на удаление.

Также как и для справочников, можно задавать права и для конкретных видов документов, добавляя их кнопкой "+".

Установка всех прав (кроме "Дата запрета редакт." и "Дней доступа") сводится к установке одного из трех значений "+", "-" и "пусто".
"+" - разрешено данное действие (если оно конечно не запрещено правами на уровне конфигуратора);
"-" - запрещено данное действие;
"пусто" - действие не определено, оно будет определяться правом, заданном для данного действия на других уровнях иерархии прав (права объектов/видов, права пользователей/групп пользователей).

Приоритет имеют права, заданные для конкретных видов, перед правами, заданными в целом на объект.
Права, определенные для конкретного пользователя имеют приоритет над правами, заданными для группы пользователей.
В случае если на объект действуют несколько противоречащих прав, то в итоге действовать будет наиболее запрещающее.
Отдельно стоит отметить о действии даты запрета редактирования документов. Для конкретного вида документа она вычисляется с использованием трех параметров:
1) Константа.ДатаЗапретаРедактирования
2) право "Дата запрета редакт."
3) право "Дней доступа".
Права "Дата запрета редакт." и "Дней доступа" имеют приоритет перед значением константы ДатаЗапретаРедактирования, даже если ее значение более запрещающее.
Если на объект не заданы никакие права, то действует права, заданные в конфигураторе (Говоря другими словами, расширенная настройка прав пользователей может лишь ограничить права, заданные в конфигураторе, но никак не может их расширить).

В форме списка Пользователей существует возможность:
1) очистить набор прав пользователей;
2) задать набор прав пользователей, используя в качестве образца права другого пользователя (группы пользователей) - скопировать
3) распечатать полный набор прав с учетом иерархии, действующий на выделенного пользователя (группу пользователей)

В форме журналов документов и в самих документах в типовых конфигурациях есть кнопка Действия. В список действий добавлен новый пункт "Автор документа". Выбор этого пункта покажет автора текущего документа, дату создания документа и набор прав, действующих на данный вид документов для этого автора.

-----------------------------------------------------------------------------------
Более подробно опишу систему правил позже, сейчас нет времени.

Планы доработок на будущее:
1) избежать сильного изменения конфигурации при внедрении системы прав (видимо, буду использовать ВК 1С++);
2) расширить иерархию прав доступа (например, создавая произвольные группы, объединяющие список справочников, документов);
3) увеличить объекты прав, добавив права на действия над счетами ПланаСчетов, права на запуск встроенных Отчетов, Обработок;
4) добавить возможность установки прав на изменение конкретных реквизитов объектов (справочников, документов);
5) создать менеджер внешних отчетов, настраивающий права использования внешних отчетов (заменив Сервис - Дополнительные возможности).

 

Скачать файлы

Наименование Файл Версия Размер
-
.1243311325 40,47Kb
25.09.09
806
.1243311325 40,47Kb 806 Скачать

См. также

Комментарии
1. Romarius (Romarius) 12 26.05.09 10:34 Сейчас в теме
2. Андрей (Свой) 165 26.05.09 12:17 Сейчас в теме
Спасибо за разработку, если можно, задам вопросы по внедрению этой системы:
1. кто значально был постановщиком задачи ? (руководство, отдельный ответственный работник), в каком виде ставлась задача - кратком или подробном?
2. как восприняли работу системы те, кого ограничивают - операторы, менеджеры?
3. сложно ли осваивалась система руководством, настраивают ли они сами доступы ?
4. каков уровень удовлетворенности заказчиков этой системы в вашем случае ?
3. Victor Nespyatin (victuan) 1537 26.05.09 13:45 Сейчас в теме
(2):
1) По совместительству на этом предприятии я не только программист, но и постановщик учета. Задачу поставил я.
2) Пока об этом говорить рано. Разработка системы началась 22.05.09 (4 дня назад), закончена сегодня и внедрена на предприятии (т.е. это бета-версия). Поэтому никто еще ничего не почувствовал. Следующим шагом будет тотальное ужесточение всех прав, чтобы методом проб и ошибок вычислить оптимальный набор прав пользователей (принип прост, если пользователю дать лишние права изначально, он промолчит, если забрать, он прибежит и начнет их (права) качать)
3) инструкцию по настройке я отдал сегодня гл. бухгалтеру, время покажет как она справится
4) об этом говорить еще рано. Но думаю результат удовлетворит многих: и постановщика учета и потребителей системы.
Stеls; Свой; +2 Ответить 1
4. Shaman (Shaman342) 26.05.09 13:58 Сейчас в теме
(3) можно ли инструкцию по настройке в студию? ... чтобы не изобретать велосипед ;)
5. Артур Аюханов (artbear) 870 26.05.09 14:02 Сейчас в теме
>>Планы доработок на будущее:
>>1) избежать сильного изменения конфигурации при внедрении системы прав
>>(видимо, буду использовать ВК (формекс?))
Рекомендую юзать ВК 1С++.

В этой ВК я специально для подобных задач реализовал класс Перехватчик - универсальный перехват практически любых событий 1С и различных ВК без переписывания кучи кода в конфигурации.

Читай доку на 1С++ 3.0.1.ХХХ и форум компоненты на 1cpp.ru

ЗЫ я специально делал этот объект, потому что надоело для каждого метаданного прописывать спец.код в модуле формы и модуле документа.

Очень рекомендую.
6. Victor Nespyatin (victuan) 1537 26.05.09 14:02 Сейчас в теме
(4) Инструкция по настройке в описании сабжа (начиная со слов "Настройка прав пользователей осуществляется через вызов справочника Пользователи...").
Другой пока нет ;)
7. Артур Аюханов (artbear) 870 26.05.09 14:04 Сейчас в теме
(5+) Перехватчик как раз позволяет избежать "идиотского" для подобных задач встраивания спец.кода во все формы :(
8. Victor Nespyatin (victuan) 1537 26.05.09 14:04 Сейчас в теме
(5) Спасибо за рекомендации, наверное, я так и сделаю. И даже, наверное, класс ВыполняемыйМодуль задействую, чтобы можно было задавать в пользовательском режиме произвольное условие на право доступа.
9. Артур Аюханов (artbear) 870 26.05.09 15:13 Сейчас в теме
(8) Да, для произвольных условий ВМ весьма удобен.
10. Алексей Константинов (alexk-is) 6143 26.05.09 18:59 Сейчас в теме
(0) Может быть текст процедур раскрасить?
11. Victor Nespyatin (victuan) 1537 27.05.09 05:58 Сейчас в теме
(11) В описании разработки? Раскрасил.
12. Ёпрст (Ёпрст) 1018 27.05.09 08:57 Сейчас в теме
13. Victor Nespyatin (victuan) 1537 27.05.09 09:03 Сейчас в теме
(12) Набор прав пользователя: [Вася]:*
Звездочка (*) дает мне право утверждать, что набор прав не записан для текущего пользователя, следовательно, не действует.
Для того, чтобы записать изменения набора прав нужно нажать кнопку с изображением дискеты.
14. Артур Аюханов (artbear) 870 27.05.09 09:05 Сейчас в теме
15. Victor Nespyatin (victuan) 1537 27.05.09 09:13 Сейчас в теме
(14) Попозже посмотрю. Блиц-вопрос по перехватчику: он позволяет перехватить метода объекта, выполнить код, а затем продолжить выполнение перехваченного метода?
16. Ёпрст (Ёпрст) 1018 27.05.09 09:14 Сейчас в теме
18. Victor Nespyatin (victuan) 1537 27.05.09 09:22 Сейчас в теме
(14) Посмотрел доку, что-то лениво разбираться, примерчик бы живой.
19. Ёпрст (Ёпрст) 1018 27.05.09 09:25 Сейчас в теме
(18) смотри Undo в моём профиле, например.
20. Victor Nespyatin (victuan) 1537 27.05.09 09:59 Сейчас в теме
А перехватчик умеет перехватывать события, не объявленные в форме объекта (напр., проц. ПриЗаписи используется не во всех справочниках, а интерактивную запись нужно перехватывать везде)
21. Артур Аюханов (artbear) 870 27.05.09 10:09 Сейчас в теме
(18) Или юзай поиск в форуме 1cpp.ru по слову Перехватчик, примеров там море + ! разбор ошибок использования Перехватчика ! :)
22. Артур Аюханов (artbear) 870 27.05.09 10:11 Сейчас в теме
(0) Кстати, на этом сайте уже вроде выкладывался пример работы с правами для 77 на базе Перехватчика.
Правда, ссылку не помню.
На форуме 1С++ в разделе Репозитарий точно есть.
23. Ёпрст (Ёпрст) 1018 27.05.09 10:15 Сейчас в теме
(20) Конечно! Перехватывает не их, но еще и все события формекса...
24. Ёпрст (Ёпрст) 1018 27.05.09 10:16 Сейчас в теме
25. Артур Аюханов (artbear) 870 27.05.09 10:17 Сейчас в теме
(20) Да, в этом вся прелесть/фича Перехватчика - что для нормальной работы универсальной механизмов совершенно не нужно прописывать обработчики событий в каждой форме, а достаточно определить их на верхнем уровне.
Любое перехваченное событие в Перехватчике можно отменить, не пропустив на следующий уровень, например, в модуль конкретной формы - т.е. полное управление на разработчике.
26. Артур Аюханов (artbear) 870 27.05.09 10:19 Сейчас в теме
(23+) Перехватчик перехватывает не только штатные события 1С, как форм, так и глобальника, но и все события ФормЕкс, а также события других ВК, реализованные аналогично событиям 1С и ФормЕкс - например, события ВК RIK_SQL, RWidjets.
Причем код классов перехватчиков совершенно не зависит от этих ВК, все универсально.
27. Алексей (Alex1c) 17 27.05.09 10:35 Сейчас в теме
"5) создать менеджер внешних отчетов, настраивающий права использования внешних отчетов (заменив Сервис - Дополнительные возможности)."
Рекомендую ознакомиться с http://www.infostart.ru/profile/1723/projects/615/
использую уже давно, полностью устраивает. Решение весьма продумано и оригинально
28. Артур Аюханов (artbear) 870 27.05.09 10:41 Сейчас в теме
(27+) Ага, Навигатор рулит, очень удобно.
29. Victor Nespyatin (victuan) 1537 27.05.09 10:43 Сейчас в теме
(27) Спасибо за ссылку! Вещь, судя по описанию, хорошая!
Я же хотел просто интегрировать нечто подобное с моим справочником пользователей.
30. Victor Nespyatin (victuan) 1537 28.05.09 05:17 Сейчас в теме
Обновил демо-конфигурацию: исправил ошибки:
1) не учитывались мгновенно изменения прав пользователя при переносе в другую группу
2) При создании нового пользователя он автоматически помещается в группу пользователя Константа.ПраваПользователяПоУмолчанию
31. Victor Nespyatin (victuan) 1537 29.05.09 08:10 Сейчас в теме
Обновил демо-конфигурацию: исправил ошибку:
3) При вводе нового документа копированием неверно устанавливались Автор и Дата создания документа
32. Victor Nespyatin (victuan) 1537 01.06.09 08:03 Сейчас в теме
Обновил демо-конфигурацию: исправил ошибки:
4) глюки интерфейса (ошибки отображения при редактировании дерева набора прав)
5) при удалении проведенного документа проверяется дополнительно право "ОтменаПроведения"
33. Victor Nespyatin (victuan) 1537 24.06.09 06:11 Сейчас в теме
Обновил демо-конфигурацию: исправил ошибку:
6) для новых документов не проверялось право "Дата запрета редактирования".

ЗЫ: как видите на практике обработка активно используется. Но руки прикрутить 1с++ пока не доросли, т.к. в моей деятельности достаточно уже имеющегося функционала.
34. Слава (DeepDiver) 5 29.07.09 17:56 Сейчас в теме
Рарус Администратор не смотрели?
35. Victor Nespyatin (victuan) 1537 30.07.09 09:39 Сейчас в теме
(34) Нет, и почему-то не хочется что-либо от Раруса смотреть.
36. Слава (DeepDiver) 5 30.07.09 14:35 Сейчас в теме
А зря! Отличная администрилка для 77 не защищённая никакими ключами...
37. rosalin (rosalin) 13.10.09 22:37 Сейчас в теме
Спасибо! Отличная обработка давно ищу что то подобное , возможно ли доработать что бы можно было выставлять ограничение прав на группу или строку справочника :?:

38. Александр Медведев (anig99) 2533 13.10.09 23:49 Сейчас в теме
(37) перейдите на 8.1 Там есть RLS (;
39. rosalin (rosalin) 14.10.09 09:10 Сейчас в теме
(38) Спасибо конечно но ищу более радикальное решение на 8.1 нет технической возможности перейти
40. Victor Nespyatin (victuan) 1537 27.10.09 16:42 Сейчас в теме
(37) Да, у меня в планах стоит контроль прав с точностью до групп и элементов справочника, а также с точностью до реквизитов объектов.
Вопрос в том, когда руки найдут свободное время это реализовать.
41. Igor Yankovskiy (yanis) 28.10.10 13:59 Сейчас в теме
(40) Эту идею удалось реализовать? Если да - то можете выложить?
42. Victor Nespyatin (victuan) 1537 28.10.10 16:31 Сейчас в теме
(41) Пока не реализовал. Возможно займусь этим в межотчетное время.
43. Тимофей Иванов (Timson1234) 17.01.12 17:20 Сейчас в теме
Спасибо большое, очень помогло)
45. Victor Nespyatin (victuan) 1537 30.01.12 04:28 Сейчас в теме
(44)Это что? Клоны тупым копипастом моих сообщений набирают себе балы? Модераторов прошу обратить внимание!
46. Денис Иванов (das58) 19.11.13 12:31 Сейчас в теме
Отлично! Еще бы инсталлятор к ней, чтоб прописывал все эти процедуры сам. Где-то недавно попадалась разработка, которая во внешние отчеты засовывает необходимый код.
47. Juliett (JuliettT) 5 21.07.15 08:39 Сейчас в теме
Нужен такой же для 8.2 Ут, может есть у кого на сайте?
Оставьте свое сообщение