Вход | Регистрация



РольДоступна() или ПравоДоступа() ?

РольДоступна() или ПравоДоступа() ?
Я
   OldCondom
 
25.07.18 - 10:46
3. Другое60% (3)
2. ПравоДоступа40% (2)
1. РольДоступна0% (0)
Всего мнений: 5

Извечный вопрос.
Всегда использовал конструкцию "и РольДоступна("ПолныеПрава"). Но тут возник спор с саповцами, что нарушаем саму парадигму разграничения прав(сам ни**я не понял).
В целом, правда похоже на костыль дополнительная проверка на полные права.

Допустим, надо всем ограничить доступ к справочнику, если нет прав "МожноРедактироватьЭтотСправочник". Как правильнее?

Если РольДоступна("МожноРедактироватьЭтотСправочник") или РольДоступна("ПолныеПрава")


или

Если ПравоДоступа("Изменение", Метаданные.Справочники.ЭтотСправочник)

?
 
 
   OldCondom
 
1 - 25.07.18 - 10:48
Не понял, откуда здесь голосовалка?
   lodger
 
2 - 25.07.18 - 10:53
ПравоДоступа позволяет рулить правами из одного окна с ролями, тогда как РольДоступна заставляет тебя носится по коду и искать вызовы функции.
   lodger
 
3 - 25.07.18 - 10:53
имхо, РольДоступна только для совместимости со старыми конфами нужна.

2. ПравоДоступа
   rphosts
 
4 - 25.07.18 - 10:54
(1) ну а как ты определишь предпочтения среди дочитавших до конца нулевой пост?
   OldCondom
 
5 - 25.07.18 - 10:58
(4) а, понял. Я думал это что-то нажал и оно само(с).
А по вопросу, я бы хотел уяснить, как правильно, желательно со ссылками на одноэс. Понимаю, что "правильно" - понятие растяжимое и будет немного каша, но все же какое-то понятие хочется усвоить.
   Serg_1960
 
6 - 25.07.18 - 11:07
(0) А что тут не понятно? Пользователю может быть назначено несколько ролей и к конкретному объекту он может иметь конкретные права доступа на основании их. В зависимости от цели алгоритма можно требование наличие у пользователя конкретной роли (или совокупности их), но это нарушает сам принцип разграничения прав.

Ваш "саповец", в принципе, прав - вспомните об RLS.
   Локи-13
 
7 - 25.07.18 - 11:11
(0) Зависит от задачи.

Право доступа у него может быть, а вот роли нет.
Что тогда? Давать доступ или нет?
Это две разные функции для разных задач.

ПравоДоступа - проверяем перед выполнением операции с БД, чтобы не получить ошибку.

РольДоступна - проверка по бизнес-процессу. У роли может вообще не быть галочек к объектам.

3. Другое
   Serg_1960
 
8 - 25.07.18 - 11:22
(7) "У роли может вообще не быть галочек к объектам" - эээ... то есть роль в качестве логического значения? Не эффективно, имхо, но имеет право быть.
   lodger
 
9 - 25.07.18 - 11:24
(7) для таких кейсов придумали привилегированный режим\модуль.
   Cthulhu
 
10 - 25.07.18 - 11:29
(7) угумц.. утрированно - возможность и способ, что нужно проверять - зависит от контекста.

3. Другое
 
 Рекламное место пустует
   ildary
 
11 - 25.07.18 - 11:32
А как быть с РольДоступна("ПолныеПрава") - у него разве есть аналоги?
   Локи-13
 
12 - 25.07.18 - 11:32
(9) причем тут привилегированный модель?
   Локи-13
 
13 - 25.07.18 - 11:34
(8) кстати еще бывают роли на формы, команды, печать документов
это вообще не доступ к базе
   Дебет
 
14 - 25.07.18 - 11:46
написано же на ИТС про это
   VladZ
 
15 - 25.07.18 - 11:48
(0) Зависит от задачи. И это... Совет: не спорь с САПовцами. У них свои тараканы в голове.
   Timon1405
 
16 - 25.07.18 - 12:12
переделайте пункты в голосовалке:
-Роль я дрожащая или
-право имею
   rastat150
 
17 - 25.07.18 - 12:13
https://its.1c.ru/db/v8std/content/2149184386/hdoc
Для проверки прав доступа в коде следует использовать метод ПравоДоступа.
Например, неправильно:

Если РольДоступна("ДобавлениеИзменениеСтранМира") Тогда ...
Если РольДоступна("ПросмотрОтчетаПопулярныеСтраны") Тогда ...

правильно:

Если ПравоДоступа("Редактирование", Метаданные.Справочники.СтраныМира) Тогда ...
Если ПравоДоступа("Просмотр", Метаданные.Отчеты.ПопулярныеСтраны) Тогда ...

Такой подход позволяет повысить устойчивость кода к пересмотру состава ролей в конфигурации.

4. В тех случаях, где роль не дает никаких прав на объекты метаданных, а служит только для определения того или иного дополнительного права, следует использовать метод РольДоступна. При использовании в конфигурации Библиотеки стандартных подсистем (БСП) следует использовать функцию РолиДоступны общего модуля Пользователи:
Например, без использования БСП:

Если РольДоступна(...) Или <ЭтоПолноправныйПользователь> Или ПривилегированныйРежим() Тогда ...

Либо аналогичная проверка с использованием БСП:

Если Пользователи.РолиДоступны(...) Тогда ...
   Tonik992
 
18 - 25.07.18 - 12:16
(17) По-моему самый исчерпывающий ответ.

3. Другое
   OldCondom
 
19 - 25.07.18 - 12:20
(17) Огромное спасибо!
(18) во истину!
   Cool_Profi
 
20 - 25.07.18 - 12:35
(17) @Либо аналогичная проверка с использованием БСП:@
За использование БСП нужно лицом к стенке и пулю в лоб...
   ildary
 
21 - 25.07.18 - 12:37
(20) А как быть с типовыми? Отказаться от БСП и постоянно костылить своё?
   MUXACb
 
22 - 25.07.18 - 12:41
(17) Не работает если нужно проверить наличие запрещающей роли у пользователя с полными правами
   Tonik992
 
23 - 25.07.18 - 12:47
(22) Запрещающая роль?
А можете пример привести. Никогда не приходился стакливаться с выдачей роли, которая что-то бы запрещала.
   ildary
 
24 - 25.07.18 - 12:50
(23) наверное что-то вроде
Если РольДоступна( ЗапретПродаж ) Тогда
   Отказ = Истина;
КонецЕсли;
   MUXACb
 
25 - 25.07.18 - 12:51
(23) В ЗУП 3 запретить редактирование среднего заработка
(24) Вернет Ложь если доступны полные права
   Мандалай
 
26 - 25.07.18 - 12:57
Читаем стандарты разработки

2. ПравоДоступа
   MUXACb
 
27 - 25.07.18 - 13:11
(26) Можно пример для ситуации в (22)?
   YaFedor
 
28 - 25.07.18 - 13:14
(27) Не существует "запрещающих" ролей в 1с 8, а жаль
   Tonik992
 
29 - 25.07.18 - 15:03
(28) Зато существует "запрещающая проверка" на наличие роли :-)
   YaFedor
 
30 - 25.07.18 - 15:37
(29) Об этом все уже написано в (17)
   Мандалай
 
31 - 25.07.18 - 15:43
(27)Значит неверная архитектура решения, если требуется применять методику, нерекомендованную вендором.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует