|
Запрет редактирования если нет специальной Роли | ☑ | ||
---|---|---|---|---|
0
Amig0_0
14.04.20
✎
15:19
|
Добрый день, уважаемые.
Такая задача: Есть не типовая роль. Если она есть у пользователя, он может редактировать документ, если нет - не может. Легко проверяется с помощью РольДоступна(). Но помимо этого этот документ может редактировать человек с ролью "Главный бухгалтер" и вот эта роль уже создана в Предприятии. https://yadi.sk/i/VDbb-hWKMEdmkA Эту роль РольДоступна() не видит, а функция БСП ЕстьРоль() всегда возвращает ИСТИНА, если пользователь полноправный. Комментирование кусочка проверяющего на полноправность // Если Пользователи.ЭтоПолноправныйПользователь(Пользователь) Тогда //Возврат Истина; КонецЕсли; // приводит к исключительной ситуации. https://yadi.sk/i/pHand1jcvpS6hQ Мне кажется, что я полез не в ту степь. Кто-нибудь сталкивался с подобными решениями? Заранее спасибо! |
|||
1
Amig0_0
14.04.20
✎
15:21
|
БУХ для Бел.2.1
|
|||
2
AAA
14.04.20
✎
15:39
|
Как вариант, можно сделать расширение, в котором переопределить метод модуля менеджера пользователей ЭтоПолноправныйПользователь(Пользователь). В нем и учесть эту специальную роль
|
|||
3
Amig0_0
14.04.20
✎
15:53
|
(2) Да, как вариант, но нужно более точечное решение. БлавБух не равно полноправный пользователь. Только для "этого" документа...
|
|||
4
timurhv
14.04.20
✎
16:38
|
(0) Потому что у администраторов стоит роль "ПолныеПрава", остальные автоматом сбрасываются, либо игнорируются. Даже если в конфигураторе добавить роль, то потом она слетит. Так работает БСП.
|
|||
5
timurhv
14.04.20
✎
16:43
|
||||
6
Amig0_0
14.04.20
✎
16:47
|
(4) Да, именно так. Роль слететь не слетит, просто ее игнорит ПолныеПрава в функции ".ЭтоПолноправныйПользователь(" как я уже писал раньше.
Я тут покопался, люди лепят запрос на основе справочника ГруппыДоступа и регистра с Ролями, но как - то это мутно выглядит)) Если что-нибудь наколхожу - покажу результат!) |
|||
7
Amig0_0
14.04.20
✎
16:48
|
(5) Да, эта статья гуляет везде) И у Чистова на форуме и на Инфостата, но не работает... У меня при любом раскладе возвращает ЛОЖЬ. Пологаю проблема в условии "ПрофилиГруппДоступаРоли.Роль.Имя = &Роль"...
|
|||
8
fisher
14.04.20
✎
16:52
|
Ничего не понял. Полноправный пользователь должен иметь права в любом случае. На то он и полноправный. В чем проблема давать права при наличии спец-роли ИЛИ если пользователь равноправный?
|
|||
9
fisher
14.04.20
✎
16:52
|
Тьфу. Полноправный.
|
|||
10
WorkOut_Man
14.04.20
✎
16:53
|
Надо просто порядок в ролях навести и пользоваться штатным функционалом
|
|||
11
Amig0_0
14.04.20
✎
17:00
|
(8) (10) Да, возможно упрощу программно и разберусь с текущими ролями...
Единственное, хотелось бы нарыть нормально работающую (5) функцию. Она, чисто теоретически то что мне нужно)) |
|||
12
AAA
14.04.20
✎
17:23
|
С ролями навести порядок надо. Но например для запуска внешних обработок недостаточно полных прав
|
|||
13
WorkOut_Man
14.04.20
✎
17:25
|
(11) Там в БСП если поковыряться вроде есть функция проверки административной роли и обычного пользователя.
|
|||
14
Amig0_0
14.04.20
✎
17:54
|
В общем)))
Расковырял типовую БСП Функцию УправлениеДоступом.ЕстьРоль("ПолныеПрава") и заколхозил так: Функция es_ЕстьРоль(ИмяРоли, Пользователь = Неопределено) Экспорт Если Пользователь = Неопределено Тогда Пользователь = ПользователиКлиентСервер.ТекущийПользователь(); КонецЕсли; Запрос = Новый Запрос; Запрос.УстановитьПараметр("АвторизованныйПользователь", Пользователь); Запрос.УстановитьПараметр("Роль", ИмяРоли); Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ГруппыДоступаПользователи.Ссылка КАК Ссылка, | ПрофилиГруппДоступаРоли.Ссылка.Наименование КАК НаименованиеРоли |ИЗ | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей | ПО (СоставыГруппПользователей.Пользователь = &АвторизованныйПользователь) | И (СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь) | И (СоставыГруппПользователей.Используется) | И (НЕ ГруппыДоступаПользователи.Ссылка.ПометкаУдаления) | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли | ПО ГруппыДоступаПользователи.Ссылка.Профиль = ПрофилиГруппДоступаРоли.Ссылка | И (НЕ ПрофилиГруппДоступаРоли.Ссылка.ПометкаУдаления) |ГДЕ | ПрофилиГруппДоступаРоли.Ссылка.Наименование = &Роль"; Возврат НЕ Запрос.Выполнить().Пустой(); КонецФункции Точечно проверяет наличие роли если спросить в Строковом выражении. |
|||
15
Amig0_0
14.04.20
✎
17:57
|
Решение , скажем мягко такое себе... Но у мне на текущий момент подходит. Подумаю / порыщу в интернетах еще, но пока запилю этот вариант. Дело в том , что в базе сплошь у всех административные права и пользователей очень много. Заблочить 2 документа (такое ТЗ) проще лишней функцией, а не перспективу, безусловно нужно разобрать права доступа и роли...
Если у кого еще будут советы / варианты пишите плиз) Спасибо! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |