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

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

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

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

или

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

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

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

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

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

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

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

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

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

правильно:

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

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

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

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

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

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

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

Если РольДоступна( ЗапретПродаж ) Тогда
   Отказ = Истина;
КонецЕсли;
25 MUXACb
 
25.07.18
12:51
(23) В ЗУП 3 запретить редактирование среднего заработка
(24) Вернет Ложь если доступны полные права
26 Мандалай
 
25.07.18
12:57
Читаем стандарты разработки

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

из (17)
[не рекомендуется использовать ролевую настройку видимости в элементах форм]

так а нахрена они вообще сделали эту возможность?
33 Остап Сулейманович
 
20.11.18
11:23
(32) Рулить нужно доступностью, а не видимостью. Причин много.
34 Nikoss
 
20.11.18
11:49
(33) можно подробнее про причин много?

так зачем в платформе 1С дают возможно делать то, что не рекомендует делать таже 1С?
35 Cyberhawk
 
20.11.18
11:58
(34) Не слушай его. На ИТС в том пункте речь только о корневых подсистемах и начальной страницы. Про формы объектов там конечно же речи нет и видимость по ролям использовать можно и нужно.
36 Nikoss
 
20.11.18
14:12
(35) По тексту речь как раз о формах объектов:

1. В случае большого количества ролей в конфигурации (от нескольких десятков) не рекомендуется использовать ролевую настройку видимости в элементах форм (просмотр и редактирование реквизитов по ролям, пользовательскую видимость полей формы по ролям, использование команд по ролям). Вместо этого следует придерживаться следующих подходов:
.....
37 Cyberhawk
 
20.11.18
14:16
(36) Этот пункт только про значительное количество ролей и про то, что вместо этого (в случае большого количества) надо использовать проверку кодом
38 Nikoss
 
20.11.18
14:29
(37) несколько десятков ролей наверное даже в самописках уже нормой считается. Поэтому, видимо, можно брать за правило этот пункт.
39 Cyberhawk
 
20.11.18
14:30
(38) Скорее не на абсолютное количество надо смотреть, а на их "качество": если это атомарные роли (где на каждый справочник или документ как минимум две роли - отдельно на просмотр и отдельно на добавление+изменение), тогда про видимость по ролям на формах объектов можно забыть
40 Cyberhawk
 
20.11.18
14:31
А если это "функциональные" роли (прям по должностям, например), тогда видимость по ролям хорошо заходит
41 Вафель
 
20.11.18
14:55
видимость по ролям очень сложно отлаживать
42 Вафель
 
20.11.18
14:56
поэтому видимость лучше в коде. кстате по этой же причине 1с рекомендует условное оформление в коде
43 Nikoss
 
21.11.18
07:50
(42) тьфу, еще и условное кодом делать...((
Эти рекомендации тоже с ИТС стандартов разработки?