Наиболее подходящая по идеологии оказалась эта разработка: //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) создать менеджер внешних отчетов, настраивающий права использования внешних отчетов (заменив Сервис - Дополнительные возможности).