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



Как проверить доступность конкретного объекта данных по каждому пользователю в базе?

Как проверить доступность конкретного объекта данных по каждому пользователю в базе?
Я
   TormozIT
 
09.11.18 - 11:55
Нужно выбранный в списке объект (например контрагент) проверить на предмет доступности для чтения/изменения по всем пользователям. Т.е. по объекту данных нужна таблица с колонками Пользователь, ВидДоступа, ЗначениеДоступа. Есть ли в платформе способ решения такой задачи?
 
 
   ДенисЧ
 
1 - 09.11.18 - 11:57
Глобальный контекст.ПравоДоступа (Global context.AccessRight)
Глобальный контекст (Global context)
ПравоДоступа (AccessRight)
Синтаксис:

ПравоДоступа(<Право>, <ОбъектМетаданных>, <Пользователь/Роль>, <СтандартныйРеквизитСтандартнаяТабличнаяЧасть>)
Параметры:

<Право> (обязательный)

Тип: Строка.
Название права доступа. Могут быть использованы следующие значения:
Чтение (Read) - чтение; 
Добавление (Insert) - добавление; 
Изменение (Update) - изменение; 
Удаление (Delete) - удаление; 
Проведение (Posting) - проведение документов; 
ОтменаПроведения (UndoPosting) - отмена проведения документов; 
Просмотр (View) - просмотр; 
ИнтерактивноеДобавление (InteractiveInsert) - интерактивное добавление; 
Редактирование (Edit) - редактирование; 
ИнтерактивноеУдаление (InteractiveDelete) - интерактивное непосредственное удаление; 
ИнтерактивнаяПометкаУдаления (InteractiveSetDeletionMark) - интерактивная пометка на удаление; 
ИнтерактивноеСнятиеПометкиУдаления (InteractiveClearDeletionMark) - интерактивное снятие пометки на удаление; 
ИнтерактивноеУдалениеПомеченных (InteractiveDeleteMarked) - интерактивное удаление помеченных объектов; 
ИнтерактивноеПроведение (InteractivePosting) - интерактивное проведение; 
ИнтерактивноеПроведениеНеОперативное (InteractivePostingRegular) - интерактивное проведение (стандартными командами форм) документа в неоперативном режиме; 
ИнтерактивнаяОтменаПроведения (InteractiveUndoPosting) - интерактивная отмена проведения; 
ИнтерактивноеИзменениеПроведенных (InteractiveChangeOfPosted) - интерактивное редактирование проведенного документа. Если право не установлено, то пользователь не может проведенный документ удалить, установить пометку удаления, перепровести или сделать непроведенным. Форма такого документа открывается в режиме просмотра; 
ВводПоСтроке (InputByString) - использование режима ввода по строке; 
УправлениеИтогами (TotalsControl) - управление итогами регистра бухгалтерии и регистра накопления (установка периода, по который рассчитаны итоги, и пересчет итогов); 
Использование (Use) - использование; 
Администрирование (Administration) - право на выполнение административных действий над всей информационной базой и редактирование списка пользователей (право для конфигурации); требует наличия права "АдминистрированиеДанных"; 
АдминистрированиеДанных (DataAdministration) - право на административные действия над данными; 
МонопольныйРежим (ExclusiveMode) - использование монопольного режима; 
АктивныеПользователи (ActiveUsers) - просмотр списка активных пользователей; 
ЖурналРегистрации (EventLog) - журнал регистрации; 
ВнешнееСоединение (ExternalConnection) - внешнее соединение; 
Automation (Automation) - использование automation; 
ИнтерактивноеОткрытиеВнешнихОбработок (InteractiveOpenExtDataProcessors) - интерактивное открытие внешних обработок; 
ИнтерактивноеОткрытиеВнешнихОтчетов (InteractiveOpenExtReports) - интерактивное открытие внешних отчетов; 
Получение (Get) - получение значения, не хранящегося в базе данных; 
Установка (Set) - установка значения, не сохраняемого в базе данных; 
ИнтерактивнаяАктивация (InteractiveActivate) - интерактивная активация; 
Старт (Start) - старт бизнес-процесса; 
ИнтерактивныйСтарт (InteractiveStart) - интерактивный старт бизнес-процесса; 
Выполнение (Execute) - выполнение задачи; 
ИнтерактивноеВыполнение (InteractiveExecute) - интерактивное выполнение задачи; 
Вывод (Output) - вывод на печать, запись и копирование в буфер обмена; 
ОбновлениеКонфигурацииБазыДанных (UpdateDataBaseConfiguration) - обновление конфигурации базы данных; 
ТонкийКлиент (ThinClient) - право запуска тонкого клиента; 
ВебКлиент (WebClient) - право запуска веб-клиента; 
ТолстыйКлиент (ThickClient) - право запуска толстого клиента; 
РежимВсеФункции (AllFunctionsMode) - право на использования режима "Все функции"; 
СохранениеДанныхПользователя (SaveUserData) - право на сохранение данных пользователя (настроек, избранного, истории); 
ИзменениеСтандартнойАутентификации (StandardAuthenticationChange) - пользователь имеет право изменять свои сохраненные параметры стандартной аутентификации внешнего источника данных; 
ИзменениеСтандартнойАутентификацииСеанса (SessionStandardAuthenticationChange) - пользователь имеет право изменять параметры стандартной аутентификации внешнего источника данных для текущего сеанса; 
ИзменениеАутентификацииОССеанса (SessionOSAuthenticationChange) - пользователь имеет право изменять параметры стандартной аутентификации внешнего источника данных для текущего сеанса и текущего пользователя; 
ИнтерактивноеУдалениеПредопределенныхДанных (InteractiveDeletePredefinedData) - интерактивное удаление предопределенных данных; 
ИнтерактивнаяПометкаУдаленияПредопределенныхДанных (InteractiveSetDeletionMarkPredefinedData) - интерактивная пометка предопределенных данных; 
ИнтерактивноеСнятиеПометкиУдаленияПредопределенных (InteractiveClearDeletionMarkPredefinedData) - интерактивное снятие пометки предопределенных данных; 
ИнтерактивноеУдалениеПомеченныхПредопределенныхДан (InteractiveDeleteMarkedPredefinedData) - интерактивное удаление помеченных предопределенных данных; 
АдминистрированиеРасширенийКонфигурации (ConfigurationExtensionsAdministration) - право на администрирование расширений конфигурации (как интерактивно, так и программно) в режиме "1С:Предприятие". В безопасном режиме администрирование расширений невозможно; 
ЧтениеИсторииДанных (ReadDataHistory) - чтение версий данных; 
ПросмотрИсторииДанных (ViewDataHistory) - интерактивный просмотр записей истории данных. 
ЧтениеИсторииОтсутствующихДанных (ReadDataHistoryOfMissingData) - чтение версий отсутствующих данных; 
ИзменениеИсторииДанных (UpdateDataHistory) - изменение версий; 
ИзменениеИсторииОтсутствующихДанных (UpdateDataHistoryOfMissingData) - изменение версий отсутствующих данных; 
ИзменениеНастроекИсторииДанных (UpdateSettingsDataHistory) - изменение настроек истории данных; 
ИзменениеКомментарияИсторииДанных (UpdateDataHistoryVersionComment) - изменение комментария версии истории данных; 
РедактированиеКомментарияВерсииИсторииДанных (EditDataHistoryVersionComment) - интерактивное изменение комментария версии истории данных; 
ПереходНаВерсиюИсторииДанных (SwitchToDataHistoryVersion) - переход на версию истории данных; 
РегистрацияИнформационнойБазыСистемыВзаимодействия (CollaborationSystemInfoBaseRegistration) - регистрация информационной базы в системе взаимодействия. 
МобильныйКлиент (MobileClient) - право запуска мобильного клиента;
<ОбъектМетаданных> (обязательный)

Тип: ОбъектМетаданных: Куб, ОбъектМетаданных: ТаблицаИзмерения, ОбъектМетаданных: ВнешнийИсточникДанных, ОбъектМетаданных: Поле, ОбъектМетаданных: Таблица, ОбъектМетаданных: HTTPСервис, ОбъектМетаданных: Функция, ОбъектМетаданных: ШаблонURLHTTPСервиса, ОбъектМетаданных: ОпределяемыйТип, ОбъектМетаданных: ПланВидовРасчета, ОбъектМетаданных: ПланСчетов, ОбъектМетаданных: БизнесПроцесс, ОбъектМетаданных: Документ, ОбъектМетаданных: ЖурналДокументов, ОбъектМетаданных: Задача, ОбъектМетаданных: ПланВидовХарактеристик, ОбъектМетаданных: ПланОбмена, ОбъектМетаданных: РегистрБухгалтерии, ОбъектМетаданных: РегистрНакопления, ОбъектМетаданных: РегистрРасчета, ОбъектМетаданных: РегистрСведений, ОбъектМетаданных: Справочник, ОбъектМетаданных: ФункциональнаяОпция, ОбъектМетаданных: ПараметрФункциональныхОпций, ОбъектМетаданных: Команда, ОбъектМетаданных: ГруппаКоманд, ОбъектМетаданных: ХранилищеНастроек, ОбъектМетаданных: ОбщаяКоманда, ОбъектМетаданных: WebСервис, ОбъектМетаданных: WSСсылка, ОбъектМетаданных: Интерфейс, ОбъектМетаданных: Константа, ОбъектМетаданных: КритерийОтбора, ОбъектМетаданных: Нумератор, ОбъектМетаданных: Обработка, ОбъектМетаданных: ОбщаяКартинка, ОбъектМетаданных: Макет, ОбъектМетаданных: ОбщийМодуль, ОбъектМетаданных: Форма , ОбъектМетаданных: Стиль, ОбъектМетаданных: Язык, ОбъектМетаданных: Отчет, ОбъектМетаданных: ПакетXDTO, ОбъектМетаданных: ПараметрСеанса, ОбъектМетаданных: Перечисление, ОбъектМетаданных: ПодпискаНаСобытие, ОбъектМетаданных: Подсистема, ОбъектМетаданных: Последовательность, ОбъектМетаданных: РегламентноеЗадание, ОбъектМетаданных: Роль, ОбъектМетаданных: ЭлементСтиля, ОбъектМетаданных: Графа, ОбъектМетаданных: Измерение, ОбъектМетаданных: ЗначениеПеречисления, ОбъектМетаданных: ОперацияWebСервиса, ОбъектМетаданных: Перерасчет, ОбъектМетаданных: ПараметрWebСервиса, ОбъектМетаданных: ПризнакУчетаПланаСчетов, ОбъектМетаданных: ПризнакУчетаСубконтоПланаСчетов, ОбъектМетаданных: Реквизит, ОбъектМетаданных: ТабличнаяЧасть, ОбъектМетаданных: Ресурс, ОбъектМетаданных: РеквизитАдресации, ОбъектМетаданных: ОбщийРеквизит. 
Объект метаданных. 
<Пользователь/Роль> (необязательный)

Тип: ПользовательИнформационнойБазы; ОбъектМетаданных: Роль. 
Указывает пользователя или роль, для которых нужно определить доступность права. При этом возвращается значение права так, как оно определено в конфигурации.
<СтандартныйРеквизитСтандартнаяТабличнаяЧасть> (необязательный)

Тип: Строка.
Необязательное имя стандартного реквизита, имя стандартного реквизита стандартной табличной части или имя стандартной табличной части.
Для стандартного реквизита стандартной табличной части, имя табличной части указывается перед точкой до имени реквизита. Например: "ВидыСубконто.ВидСубконто".
Возвращаемое значение:

Тип: Булево.
Право доступа для проверяемого объекта с учетом прав на родительский объект и значения свойства "Независимые права подчиненных объектов" для роли.
Истина - право доступа к объекту установлено; Ложь - в противном случае.
Если в момент выполнения метода установлен привелигированный режим, то всегда возвращается Истина.
Описание:

Показывает установку права доступа к объекту метаданных для текущего пользователя на момент выполнения текущей строчки кода.
Вызов метода всегда требует административных прав, если явно указан третий параметр - <Пользователь/Роль>, права которого проверяются. Если пользователь не указан, то проверяются права текущего пользователя, и для этого наличие административных прав не требуется.
Если пользователь задан явно, то выдаются права явно заданного пользователя в соответствии с метаданными.

Доступность:

Мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент).
Примечание:

Права доступа к объектам метаданных устанавливаются при конфигурировании ролей.
Пример:

Справочник = Метаданные.Справочники.Конкуренты;
Если Не ПравоДоступа("Чтение", Справочник) Тогда
    Предупреждение(НСтр("ru = 'Доступ к данному справочнику закрыт!';"
     + " en = 'Access denied!'"));
КонецЕсли;
 

См. также:

Глобальный контекст, метод ВыполнитьПроверкуПравДоступа
МенеджерПользователейИнформационнойБазы, метод ТекущийПользователь

--------------------------------------------------------------------------------

     Методическая информация
   ДенисЧ
 
2 - 09.11.18 - 11:57
Перебираешь всех пользователей и пообъектно проверяешь.

"Вызов метода всегда требует административных прав, если явно указан третий параметр - <Пользователь/Роль>, права которого проверяются. Если пользователь не указан, то проверяются права текущего пользователя, и для этого наличие административных прав не требуется.
"
   TormozIT
 
3 - 09.11.18 - 12:44
(1) Мимо. Я прошу для объекта ДАННЫХ а не метаданных.
   FIXXXL
 
4 - 09.11.18 - 15:08
(3) если не сильно загрузный функционал, выполни запрос с РАЗРЕШЕННЫЕ
   FIXXXL
 
5 - 09.11.18 - 15:08
(4) хотя не то...
   FIXXXL
 
6 - 09.11.18 - 15:10
(3) т.е. тебе нужно проверить доступ к ссылке с учетом текущего РЛС, для каждого пользователя?
   FIXXXL
 
7 - 09.11.18 - 15:11
(6) плюс какой-то функционал может работать в привилегированном режиме...

цель какая конечная?
   ДенисЧ
 
8 - 09.11.18 - 15:11
(3) У тебя в базе 100500 документов и 500100 справочников. А ещё 100 пользователей Ты для всех будешь проверять? До пенсии надеешься, что закончит?
   Cyberhawk
 
9 - 09.11.18 - 15:13
С учетом того, что RLS могут использовать параметры сеанса, то...
   Cyberhawk
 
10 - 09.11.18 - 15:15
Можно поднять в целевой инфобазе ХТТП-сервис, выполняющий запрос, выбирающий объект по ссылке (или просто попытка получить такой объект), в этот запрос передавать параметры аутнетификации пользователя ИБ
 
 Рекламное место пустует
   Cyberhawk
 
11 - 09.11.18 - 15:17
Второй "запрос" - это ХТТП-запрос к ХТТП-сервису, в ХТТП-соединении можно задавать имя пользователя ИБ и его пароль.
Ну а хэш пароля можно подменять на время запуска.
   Cyberhawk
 
12 - 09.11.18 - 15:17
Таким образом, можно дергать ХТТП-сервис и выполнять его код под любым нужным пользователем ИБ
   TormozIT
 
13 - 09.11.18 - 15:59
ВебСервер может отсутствовать. Нужно решение без него. Про параметры сеанса согласен. В идеале хочется запускать фоновое задание под пользователем и там проверять.
   TormozIT
 
14 - 09.11.18 - 16:00
(8) Речь идет про один объект данных.
   TormozIT
 
15 - 09.11.18 - 16:08
Самая простое видимо все таки создать внешнее соединение под нужной учеткой и там проверять.
   Cyberhawk
 
16 - 09.11.18 - 16:09
Да, ФЗ с нужным пользователем было бы универсально.

Можно создать служебное РЗ с однократным выполнением в заведомо невозможную дату, перед записью указать нужного пользователя и расписание такое, чтоб РЗ сразу после записи запустилось.
Понятно дело, что тоже будет ряд ограничений (в файловой, например, будешь ждать, пока оно последовательно выполнится, а в клиент-серверной надо чтоб РЗ не были заблокированы).
   Cyberhawk
 
17 - 09.11.18 - 16:10
(15) Ну тут как и с веб-сервером СОМ-коннектора может и не быть
   TormozIT
 
18 - 09.11.18 - 16:11
(17) По моему опыту вероятность этого намного ниже.
   Вафель
 
19 - 09.11.18 - 16:12
чтоб комконнектором подключиться нужно пароли знать, а вот их может и не быть.
   TormozIT
 
20 - 09.11.18 - 16:14
(19) У админа они всегда есть, если он не боится временной подмены пароля.
   Cyberhawk
 
21 - 09.11.18 - 16:15
(19) Не нужно
   ДенисЧ
 
22 - 09.11.18 - 16:33
(20) Открой для себя стандартный функционал смены пароля пользователем. А временная подмена - это хакерство. Как ты его обратно вернёшь?
   Cyberhawk
 
23 - 09.11.18 - 16:36
(22) ПользовательИнформационнойБазы.СохраняемоеЗначениеПароля (InfoBaseUser.StoredPasswordValue)
ПользовательИнформационнойБазы (InfoBaseUser)
СохраняемоеЗначениеПароля (StoredPasswordValue)
Использование:

Чтение и запись.
Описание:

Тип: Строка.
Содержит хранимые значения пароля (хеш-функции) и хранимые значения пароля в верхнем регистре (хеш-функции) разделенные запятой.
Установка свойства определяет пароль нового пользователя (по умолчанию - пустая строка) или меняет пароль существующего пользователя.
Изменения начнут действовать только после записи пользователя.
Не следует одному пользователю устанавливать значения этого свойства совместно со значением свойства Пароль. Иначе пароль записанному пользователю будет установлен в соответствии с установленным значением свойства Пароль, а установленное значение свойства СохраняемоеЗначениеПароля будет проигнорировано.
Значение свойства не изменяется после установки значения свойства Пароль и после записи пользователя.
Чтобы получить правильное сохраняемое значение пароля, после установки пользователю нового пароля следует записать пользователя с измененным паролем, а затем прочитать его.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Примечание:

Назначается пользователю только в процессе его записи в базу данных на сервере 1С:Предприятия.
Доступно только пользователю с административными правами.
--------------------------------------------------------------------------------

     Методическая информация
   ДенисЧ
 
24 - 09.11.18 - 16:40
(23) "Содержит хранимые значения пароля (хеш-функции) и хранимые значения пароля в верхнем регистре (хеш-функции) "

Что такое хеш, объяснять не надо? Или ты этот хеш обратно в пароль будешь пихать?
   Cyberhawk
 
25 - 09.11.18 - 16:42
Не в коня корм, ясно
   dmt
 
26 - 09.11.18 - 17:01
(24)
Использование:

Чтение и запись.
   Fragster
 
27 - 09.11.18 - 17:53
(22) на самом деле там не сложно в скуле сделать бэкап таблицы юзеров, поменть пароли, проверить, вернуть обратно. но нужно делать это когда пользователь не может залогиниться в базу, иначе он заметит.
   Cyberhawk
 
28 - 09.11.18 - 17:55
(27) Тоже не осилил (23)?
   RomanYS
 
29 - 09.11.18 - 17:58
(24) поменять пароль, потом вернуть старый хеш обратно.
   Fragster
 
30 - 09.11.18 - 18:00
(28) я осилил. делаешь бэкап таблицы средствами скуля, меняешь пароли, логинишься, пихаешь таблицу юзеров обратно. изи
   Cyberhawk
 
31 - 09.11.18 - 18:02
(30) Ну вот смотри в (29), он осилил. А ты какую-то нелицензионную муть пишешь и думаешь, что осилил.
   Fragster
 
32 - 09.11.18 - 18:05
(31) так ведь так не работает ;)
   RomanYS
 
33 - 09.11.18 - 18:09
(32) Что значит не работает?

На ИТС есть кстати обработка переноса(и бэкапа) юзеров (с паролями!) через xml
 
 
   Fragster
 
34 - 09.11.18 - 18:11
(33) ты не говори, что она там есть, а давай ссылку на работающую. в старых БСП пароли в справочнике хранились открытым текстом и тогда работало. Сейчас же там хранится хэш. он позволяет сравнить вводимый пароль с реальным, но узнать реальный не позволяет.
   RomanYS
 
35 - 09.11.18 - 18:15
(34) так его не надо узнавать. Можно просто заменить хэш. Речь про платформенные механизмы. Если внутри кофигурации (БСП) дополнительные приблуды, да может не работать. С подменой/переносом/возвратом паролей "как из конфигуратора" проблем нет.
   ВРедная
 
36 - 09.11.18 - 18:17
(34) Вот как раз в старых версиях не работало, т.к. не было хэша, а открытый пароль средствами 1С получить было нельзя. В 8.3 обработка выгружает пользователей и их хэш паролей, потом загружаешь выгруженный файл в копию или в эту же базу той же самой обработкой - и оп! все пароли работают, т.к. правильный хэш подтянулся.
   Cyberhawk
 
37 - 09.11.18 - 18:17
(32) Я и говорю - не осилил ты
   Fragster
 
38 - 09.11.18 - 18:18
(37) ну хз. в общем, я по схеме из (27) делал, когда доступа до базы не было ;)
   TormozIT
 
39 - 09.11.18 - 22:40
(38) Мы рассуждаем про случай, когда ты админ и просто хочешь зайти под заданным юзером в базу. А ты про случай, когда ты в базу вообще войти не можешь.
   Philix
 
40 - 09.11.18 - 23:08
(39) Мэтр, СохраняемоеЗначениеПароля - это то, что надо.
Перебираем пользователей в цикле.
Для каждого пользователя:
СтарыйПарольХэш = текПользователь.СохраняемоеЗначениеПароля;
текПользователь.Пароль = "New1TimePassword#";

текПользователь.Записать();
// тут запускаем 1с под пользователем текПользователь и паролем New1TimePassword

// проверяем как-нибудь объект
текПользователь.СохраняемоеЗначениеПароля = СтарыйПарольХэш;
текПользователь.Записать();
КонецЦикла;

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

И без нарушения лицензионных соглашений :)
   пипец
 
41 - 09.11.18 - 23:11
попытка через заблокировать объект
   пипец
 
42 - 09.11.18 - 23:12
РЛС заблокировать не даст , остальное , хммм нада попробывать


Список тем форума
Рекламное место пустует  Рекламное место пустует
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует