|
Как проверить доступность конкретного объекта данных по каждому пользователю в базе? | ☑ | ||
---|---|---|---|---|
0
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
|
Перебираешь всех пользователей и пообъектно проверяешь.
"Вызов метода всегда требует административных прав, если явно указан третий параметр - <Пользователь/Роль>, права которого проверяются. Если пользователь не указан, то проверяются права текущего пользователя, и для этого наличие административных прав не требуется. " |
|||
3
TormozIT
гуру
09.11.18
✎
12:44
|
(1) Мимо. Я прошу для объекта ДАННЫХ а не метаданных.
|
|||
4
FIXXXL
09.11.18
✎
15:08
|
(3) если не сильно загрузный функционал, выполни запрос с РАЗРЕШЕННЫЕ
|
|||
5
FIXXXL
09.11.18
✎
15:08
|
(4) хотя не то...
|
|||
6
FIXXXL
09.11.18
✎
15:10
|
(3) т.е. тебе нужно проверить доступ к ссылке с учетом текущего РЛС, для каждого пользователя?
|
|||
7
FIXXXL
09.11.18
✎
15:11
|
(6) плюс какой-то функционал может работать в привилегированном режиме...
цель какая конечная? |
|||
8
ДенисЧ
09.11.18
✎
15:11
|
(3) У тебя в базе 100500 документов и 500100 справочников. А ещё 100 пользователей Ты для всех будешь проверять? До пенсии надеешься, что закончит?
|
|||
9
Cyberhawk
09.11.18
✎
15:13
|
С учетом того, что RLS могут использовать параметры сеанса, то...
|
|||
10
Cyberhawk
09.11.18
✎
15:15
|
Можно поднять в целевой инфобазе ХТТП-сервис, выполняющий запрос, выбирающий объект по ссылке (или просто попытка получить такой объект), в этот запрос передавать параметры аутнетификации пользователя ИБ
|
|||
11
Cyberhawk
09.11.18
✎
15:17
|
Второй "запрос" - это ХТТП-запрос к ХТТП-сервису, в ХТТП-соединении можно задавать имя пользователя ИБ и его пароль.
Ну а хэш пароля можно подменять на время запуска. |
|||
12
Cyberhawk
09.11.18
✎
15:17
|
Таким образом, можно дергать ХТТП-сервис и выполнять его код под любым нужным пользователем ИБ
|
|||
13
TormozIT
гуру
09.11.18
✎
15:59
|
ВебСервер может отсутствовать. Нужно решение без него. Про параметры сеанса согласен. В идеале хочется запускать фоновое задание под пользователем и там проверять.
|
|||
14
TormozIT
гуру
09.11.18
✎
16:00
|
(8) Речь идет про один объект данных.
|
|||
15
TormozIT
гуру
09.11.18
✎
16:08
|
Самая простое видимо все таки создать внешнее соединение под нужной учеткой и там проверять.
|
|||
16
Cyberhawk
09.11.18
✎
16:09
|
Да, ФЗ с нужным пользователем было бы универсально.
Можно создать служебное РЗ с однократным выполнением в заведомо невозможную дату, перед записью указать нужного пользователя и расписание такое, чтоб РЗ сразу после записи запустилось. Понятно дело, что тоже будет ряд ограничений (в файловой, например, будешь ждать, пока оно последовательно выполнится, а в клиент-серверной надо чтоб РЗ не были заблокированы). |
|||
17
Cyberhawk
09.11.18
✎
16:10
|
(15) Ну тут как и с веб-сервером СОМ-коннектора может и не быть
|
|||
18
TormozIT
гуру
09.11.18
✎
16:11
|
(17) По моему опыту вероятность этого намного ниже.
|
|||
19
Вафель
09.11.18
✎
16:12
|
чтоб комконнектором подключиться нужно пароли знать, а вот их может и не быть.
|
|||
20
TormozIT
гуру
09.11.18
✎
16:14
|
(19) У админа они всегда есть, если он не боится временной подмены пароля.
|
|||
21
Cyberhawk
09.11.18
✎
16:15
|
(19) Не нужно
|
|||
22
ДенисЧ
09.11.18
✎
16:33
|
(20) Открой для себя стандартный функционал смены пароля пользователем. А временная подмена - это хакерство. Как ты его обратно вернёшь?
|
|||
23
Cyberhawk
09.11.18
✎
16:36
|
(22) ПользовательИнформационнойБазы.СохраняемоеЗначениеПароля (InfoBaseUser.StoredPasswordValue)
ПользовательИнформационнойБазы (InfoBaseUser) СохраняемоеЗначениеПароля (StoredPasswordValue) Использование: Чтение и запись. Описание: Тип: Строка. Содержит хранимые значения пароля (хеш-функции) и хранимые значения пароля в верхнем регистре (хеш-функции) разделенные запятой. Установка свойства определяет пароль нового пользователя (по умолчанию - пустая строка) или меняет пароль существующего пользователя. Изменения начнут действовать только после записи пользователя. Не следует одному пользователю устанавливать значения этого свойства совместно со значением свойства Пароль. Иначе пароль записанному пользователю будет установлен в соответствии с установленным значением свойства Пароль, а установленное значение свойства СохраняемоеЗначениеПароля будет проигнорировано. Значение свойства не изменяется после установки значения свойства Пароль и после записи пользователя. Чтобы получить правильное сохраняемое значение пароля, после установки пользователю нового пароля следует записать пользователя с измененным паролем, а затем прочитать его. Доступность: Сервер, толстый клиент, внешнее соединение. Примечание: Назначается пользователю только в процессе его записи в базу данных на сервере 1С:Предприятия. Доступно только пользователю с административными правами. -------------------------------------------------------------------------------- Методическая информация |
|||
24
ДенисЧ
09.11.18
✎
16:40
|
(23) "Содержит хранимые значения пароля (хеш-функции) и хранимые значения пароля в верхнем регистре (хеш-функции) "
Что такое хеш, объяснять не надо? Или ты этот хеш обратно в пароль будешь пихать? |
|||
25
Cyberhawk
09.11.18
✎
16:42
|
Не в коня корм, ясно
|
|||
26
dmt
09.11.18
✎
17:01
|
(24)
Использование: Чтение и запись. |
|||
27
Fragster
гуру
09.11.18
✎
17:53
|
(22) на самом деле там не сложно в скуле сделать бэкап таблицы юзеров, поменть пароли, проверить, вернуть обратно. но нужно делать это когда пользователь не может залогиниться в базу, иначе он заметит.
|
|||
28
Cyberhawk
09.11.18
✎
17:55
|
(27) Тоже не осилил (23)?
|
|||
29
RomanYS
09.11.18
✎
17:58
|
(24) поменять пароль, потом вернуть старый хеш обратно.
|
|||
30
Fragster
гуру
09.11.18
✎
18:00
|
(28) я осилил. делаешь бэкап таблицы средствами скуля, меняешь пароли, логинишься, пихаешь таблицу юзеров обратно. изи
|
|||
31
Cyberhawk
09.11.18
✎
18:02
|
(30) Ну вот смотри в (29), он осилил. А ты какую-то нелицензионную муть пишешь и думаешь, что осилил.
|
|||
32
Fragster
гуру
09.11.18
✎
18:05
|
(31) так ведь так не работает ;)
|
|||
33
RomanYS
09.11.18
✎
18:09
|
(32) Что значит не работает?
На ИТС есть кстати обработка переноса(и бэкапа) юзеров (с паролями!) через xml |
|||
34
Fragster
гуру
09.11.18
✎
18:11
|
(33) ты не говори, что она там есть, а давай ссылку на работающую. в старых БСП пароли в справочнике хранились открытым текстом и тогда работало. Сейчас же там хранится хэш. он позволяет сравнить вводимый пароль с реальным, но узнать реальный не позволяет.
|
|||
35
RomanYS
09.11.18
✎
18:15
|
(34) так его не надо узнавать. Можно просто заменить хэш. Речь про платформенные механизмы. Если внутри кофигурации (БСП) дополнительные приблуды, да может не работать. С подменой/переносом/возвратом паролей "как из конфигуратора" проблем нет.
|
|||
36
ВРедная
09.11.18
✎
18:17
|
(34) Вот как раз в старых версиях не работало, т.к. не было хэша, а открытый пароль средствами 1С получить было нельзя. В 8.3 обработка выгружает пользователей и их хэш паролей, потом загружаешь выгруженный файл в копию или в эту же базу той же самой обработкой - и оп! все пароли работают, т.к. правильный хэш подтянулся.
|
|||
37
Cyberhawk
09.11.18
✎
18:17
|
(32) Я и говорю - не осилил ты
|
|||
38
Fragster
гуру
09.11.18
✎
18:18
|
(37) ну хз. в общем, я по схеме из (27) делал, когда доступа до базы не было ;)
|
|||
39
TormozIT
гуру
09.11.18
✎
22:40
|
(38) Мы рассуждаем про случай, когда ты админ и просто хочешь зайти под заданным юзером в базу. А ты про случай, когда ты в базу вообще войти не можешь.
|
|||
40
Philix
09.11.18
✎
23:08
|
(39) Мэтр, СохраняемоеЗначениеПароля - это то, что надо.
Перебираем пользователей в цикле. Для каждого пользователя: СтарыйПарольХэш = текПользователь.СохраняемоеЗначениеПароля; текПользователь.Пароль = "New1TimePassword#"; текПользователь.Записать(); // тут запускаем 1с под пользователем текПользователь и паролем New1TimePassword // проверяем как-нибудь объект текПользователь.СохраняемоеЗначениеПароля = СтарыйПарольХэш; текПользователь.Записать(); КонецЦикла; Написано по памяти, так как давно всех перевел на доменную аутентификацию и для входа пользователи у меня давно не получают отдельные пароли на 1С. Но это работает, когда надо временно сбросить пользователю пароль и зайти под ним. И без нарушения лицензионных соглашений :) |
|||
41
пипец
09.11.18
✎
23:11
|
попытка через заблокировать объект
|
|||
42
пипец
09.11.18
✎
23:12
|
РЛС заблокировать не даст , остальное , хммм нада попробывать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |