Этюды по программированию. Разграничение прав

27.04.21

Администрирование - Роли и права

Задача: Имеется конфигурация на базе Библиотеки Стандартных Подсистем(БСП) -практически любая стандартная конфигурация 1С. Есть, к примеры заказы покупателей. Есть группы менеджеров, каждая из которых должна иметь доступ только к заказам своей группы.

Этюды по программированию. Разграничение прав.

Задача: Имеется конфигурация на базе Библиотеки Стандартных Подсистем(БСП) -практически любая стандартная конфигурация 1С.

Есть, к примеры заказы покупателей. Есть группы менеджеров, каждая из которых должна иметь доступ только к  заказам своей группы.

Если менеджеры могут видеть заказы только своей группы и не могут видеть заказы других групп, то задача решается штатными средствами совсем просто:

1. Включается "Ограничивать доступа на уровне записей".

2. Создаются группы доступа, каждая включает в себя членов соответствующей группы. В настройках группы указывается профиль доступа для менеджеров. В профиле группы на закладке "Ограничения доступа" указывается "Пользователи: Запрещены все, исключения в группах пользователей".

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

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

Первый способ:

Можно создать два профиля . Один с правом доступа на чтение, второй с правом доступа на изменение. В обоих профилях все пользователи запрещены, исключения в группах доступа. Создается группа доступа с профилем на чтение, которая включает всех менеджеров. И по группе доступа на каждую группу менеджеров с профилем на изменение и исключениями для членов своей группы. 

Второй способ, для тех, кто любит идти трудным путем:

Это добавить при открытии заказа строку:

	ЭтаФорма.ТолькоПросмотр= НЕ мо_ФИРМА_Привилегированный_Сервер.ЗаказКлиентаВозможностьРедактирования(Объект.Менеджер);

Соответственно нужно добавить в конфигурацию привелигелированный общий модуль с возможностью вызова сервера.

Модуль содержит следующую экспортную функцию:   

 

Функция ЗаказКлиентаВозможностьРедактирования(Ответственный) Экспорт 
	ТекущийПользователь=Пользователи.ТекущийПользователь();
	Если  Не ЗначениеЗаполнено(Ответственный) Тогда
		Возврат Истина;
	КонецЕсли;
	Если  Ответственный= ТекущийПользователь Тогда
		Возврат Истина;
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ ПЕРВЫЕ 1
		|	ГруппыДоступаПользователи.Ссылка КАК Ссылка
		|ИЗ
		|	Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
		|ГДЕ
		|	(ГруппыДоступаПользователи.Пользователь = &ТекущийПользователь
		|			ИЛИ ГруппыДоступаПользователи.Пользователь В
		|				(ВЫБРАТЬ
		|					ГруппыПользователейСостав.Ссылка КАК Ссылка
		|				ИЗ
		|					Справочник.ГруппыПользователей.Состав КАК ГруппыПользователейСостав
		|				ГДЕ
		|					ГруппыПользователейСостав.Пользователь = &ТекущийПользователь))
		|	И ГруппыДоступаПользователи.Ссылка.Профиль = &Профиль
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ ПЕРВЫЕ 1
		|	ГруппыДоступаПользователи.Ссылка КАК Ссылка
		|ИЗ
		|	Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
		|ГДЕ
		|	(ГруппыДоступаПользователи.Пользователь = &Ответственный
		|			ИЛИ ГруппыДоступаПользователи.Пользователь В
		|				(ВЫБРАТЬ
		|					ГруппыПользователейСостав.Ссылка КАК Ссылка
		|				ИЗ
		|					Справочник.ГруппыПользователей.Состав КАК ГруппыПользователейСостав
		|				ГДЕ
		|					ГруппыПользователейСостав.Пользователь = &Ответственный))
		|	И ГруппыДоступаПользователи.Ссылка.Профиль = &Профиль";
	
	Запрос.УстановитьПараметр("ТекущийПользователь", ТекущийПользователь);
	Запрос.УстановитьПараметр("Ответственный", Ответственный);
	Запрос.УстановитьПараметр("Профиль", Справочники.ПрофилиГруппДоступа.НайтиПоНаименованию("Менеджер по продажам ФИРМА"));
	
МассивРезультатов = Запрос.ВыполнитьПакет();
Выборка1 = МассивРезультатов[0].Выбрать();
Выборка2 = МассивРезультатов[1].Выбрать();
	
	
	Если  НЕ Выборка1.Следующий() Тогда  // Пользователь не в группе "Менеджер по продажам ФИРМА"
		Возврат Истина;
	КонецЕсли;
	
	Если  Выборка2.Следующий() и Выборка1.Ссылка = Выборка2.Ссылка Тогда
		Возврат Истина;  

	КонецЕсли;
	Возврат Ложь;

КонецФункции

Обратите внимание, нужны заполненные группы доступа с профилями пользователей с названием "Менеджер по продажам ФИРМА". Надеюсь эта статья окажется Вам полезной.

P.S.: Надеюсь, вам понравится эта и другие мои статьи и разработки на //infostart.ru/profile/48714/.

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    169351    937    403    

905

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 18.09.2024, версия 1.2

18000 руб.

06.12.2023    10022    48    5    

78

Зарплата Роли и права Системный администратор Бухгалтер Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х Молдова Россия Казахстан Бухгалтерский учет Платные (руб)

Расширение позволяет максимально полно ограничить доступ пользователей к данным по заработной плате, а именно закрывает доступ к документам начисления и выплаты заработной платы, не позволяет просматривать бухгалтерские отчеты по счету учета зарплаты а также убирает зарплатные проводки из журнала проводок. Расширение запрещает просматривать платежные документы на выплату зарплаты, так же не доступны регламентные отчеты в ПФР и ИФНС. Расширение предлагает готовые настроенные профили "Бухгалтер без зарплаты", "Только просмотр без зарплаты".

5940 руб.

27.05.2021    38971    281    98    

215

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    11402    40    27    

66

Логистика, склад и ТМЦ Роли и права Программист Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Расширение для 1С:Бухгалтерия 3.0, которое позволяет использовать отдельные роли для доступа к складским документам, для доступа к документам раздела "Производство" и для доступа к документам раздела "Покупки".

4560 руб.

21.05.2019    1695309    575    194    

137

Ценообразование, анализ цен Роли и права Системный администратор Платформа 1С v8.3 Управление правами 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Расширение возможностей программы 1С УНФ. Функционал расширения - разграничение всевозможных прав пользователей и контроль при совершении различных действий.

3000 руб.

23.02.2018    59198    164    262    

156

Роли и права Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

Данная система разработана как альтернатива стандартной системе напоминаний. Но имеет ряд существенных преимуществ: отображение в базе или с отправкой по почте, свое расписание, возможность фильтрации по ролям и пользователям, формирование своих запросов и макетов, шаблоны писем, работа в фоне. А также может блокировать работу пользователей при заданных условиях. Может работать в составе любой конфигурации. Имеется справка с описанием возможностей. (Обновление от 20.02.2024, версия 2.2, расширение)

19200 руб.

29.11.2019    25887    17    8    

37
Отзывы
1. nixel 1440 30.04.17 00:35 Сейчас в теме
Обычно под документы делается две роли - на чтение и на добавление/изменение. Можно настроить два отдельных профиля и группы доступа - на чтение без ограничений и на изменение с ограничением.
artbear; jerry_maguire; milkers; +3 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. nixel 1440 30.04.17 00:35 Сейчас в теме
Обычно под документы делается две роли - на чтение и на добавление/изменение. Можно настроить два отдельных профиля и группы доступа - на чтение без ограничений и на изменение с ограничением.
artbear; jerry_maguire; milkers; +3 Ответить
5. milkers 2943 03.05.17 12:17 Сейчас в теме
(1)(2)(3)(4) Никита Грызлов, видимо абсолютно прав, можно обойтись без изменения конфигурации. Достаточно создать два профиля . Один с правом доступа на чтение, второй с правом доступа на изменение. В обоих профилях все пользователи запрещены, исключения в группах доступа. Создается группа доступа с профилем на чтение, которая включает всех менеджеров. И по группе доступа на каждую группу менеджеров с профилем на изменение и исключениями для членов своей группы. На неделе все перепроверю и перепишу статью.
2. webester 26 30.04.17 18:26 Сейчас в теме
Заголовок: ЭтюдЫ по программированию. Разграничение прав.
Сажусь читать. Очень интересно. Начинаю читать и... после первого "этюда" статья кончается. Как то странно. Это как бы статья из серии статей?
3. 1st 243 03.05.17 09:32 Сейчас в теме
Как то однобоко ограничивается возможность изменения, "чужой" менеджер не сможет изменить документ только открыв форму, зато все остальные способы изменения документа, где не требуется открытие формы, не защищены. Также не контролируется проведение/отмена проведения.

Да и что Вам мешает в настройке роли перенести условия ограничения из "Чтение" в "Изменение", что по сути в корне решило бы проблему.
4. Romarius 16 03.05.17 11:52 Сейчас в теме
Если без "Ограничивать доступа на уровне записей", то все правильно сделал. Только нужно "ПриЗаписи" в модуле проверку также поставить
6. Raminus 03.05.17 12:20 Сейчас в теме
Профили лучше пользовать а если уж пилить конфу то лучше RLS использовать.
7. ineshyk 09.05.17 23:15 Сейчас в теме
RLS - зло.

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


Имхо, решить можно без доработки типовой БСП. Поставить ограничение, например по автору.
Посмотрите, как в демо БСП это реализовано в бизнес-процессах. Тут даже RLS можно не использовать
Team leader; gortol; +2 Ответить
8. Team leader 12 14.11.17 13:35 Сейчас в теме
(7) т.е. по самому себе а если в группе 5-7 человек, или автора можно брать из списка?
Оставьте свое сообщение