Имя: Пароль:
1C
 
Почему может не работать метод ПравоДоступа
0 MNS_Ротерта
 
11.12.09
14:03
ДоступАдминистративныхПрав = Ложь;
ДоступАктивныеПользователи = Ложь;
Для каждого ТекРольПользователя Из ПользователиИнформационнойБазы.ТекущийПользователь().Роли Цикл
    Если ПравоДоступа("Администрирование", ТекРольПользователя,) Тогда
        ДоступАдминистративныхПрав = Истина;
    КонецЕсли;
    Если ПравоДоступа("АктивныеПользователи", ТекРольПользователя,) Тогда
        ДоступАктивныеПользователи = Истина;
    КонецЕсли;    
КонецЦикла;

У пользователя одна роль РМК. И у нее нет ни административных прав ни просмотра активных пользователей. Почему в условия все таки входит отладчик? Что не так я могу делать?
1 MNS_Ротерта
 
11.12.09
14:14
народ у всех выходной уже что ли? :(
2 Axel2009
 
11.12.09
14:19
Глобальный контекст
ПравоДоступа (AccessRight)
Синтаксис:
ПравоДоступа(<Право>, <Объект метаданных>, <Пользователь/Роль>)
3 MNS_Ротерта
 
11.12.09
14:19
У меня один вариант это глючит платформа 1С
4 Axel2009
 
11.12.09
14:19
Описание:
Показывает установку права доступа к объекту метаданных для текущего пользователя.
Вызов метода всегда требует административных прав, если явно указан третий параметр - Пользователь/Роль, права которого проверяются. Если пользователь не указан, то проверяются права текущего пользователя, и для этого наличие административных прав не требуется.
5 MNS_Ротерта
 
11.12.09
14:20
(2) а что я не правильно то сделал. Право указал, Роль как бъект метаданных тоже. третий параметр не нужен так как для текущего юзера хочу определить право доступа
6 Axel2009
 
11.12.09
14:21
2ой параметр что надо указывать?
7 MNS_Ротерта
 
11.12.09
14:24
(6) объект метаданных надо указывать. А я что указал.

Метаданные.Роли.РМК = ТекРольПользователя равно в отладчике истина.
8 Невский Александр
 
11.12.09
14:26
(0) а если еще использовать РольДоступна?
9 MNS_Ротерта
 
11.12.09
14:27
(8) Так у меня несколько ролей. Можно конечно сделать на рольдоступна("полныеправа") но это не совсем то что мне надо :(
10 Axel2009
 
11.12.09
14:27
ДоступАдминистративныхПрав = Ложь;
ДоступАктивныеПользователи = Ложь;
Для каждого ТекРольПользователя Из ттт.Роли Цикл
    Если ПравоДоступа("Администрирование", Метаданные,) Тогда
        ДоступАдминистративныхПрав = Истина;
    КонецЕсли;
    Если ПравоДоступа("АктивныеПользователи", Метаданные,) Тогда
        ДоступАктивныеПользователи = Истина;
    КонецЕсли;    
КонецЦикла;
11 MNS_Ротерта
 
11.12.09
14:28
Кстати тоже любопытно например следующий момент

МассивСоединений = ПолучитьСоединенияИнформационнойБазы();
       Для Каждого Соединение Из МассивСоединений Цикл
           Если Соединение.Пользователь.УникальныйИдентификатор = ТекПользовательОбмена.УникальныйИдентификатор Тогда
               Сообщить("В информационной базе найден не законченный сеанс обмена. Обмен при закрытии смены не будет запущен", СтатусСообщения.Информация);
               ЗавершитьРаботуСистемы(Ложь);
           КонецЕсли;
       КонецЦикла;

Если убрать УникальныйИдентификатор то Соединение.Пользователь <> ТекПользовательОбмена

Тоже любопытный глюк
12 Axel2009
 
11.12.09
14:28
тьфу, цикл убираем нафик
13 Axel2009
 
11.12.09
14:30
потому что COMObject при сравнивании и есть COMObject, а не ссылка на пользователя.
14 MNS_Ротерта
 
11.12.09
14:31
(12) без цикла сработало хотя не понятно конечно почему мой вариант с циклом не отрабатывал.
15 Невский Александр
 
11.12.09
14:36
(14) может он все роли брал, а не только разрешенные для этого пользователя?
16 Axel2009
 
11.12.09
14:37
(14) наверна потому что у Ролей нет такого права "Администрирование"
попробуйте такое провернуть
    Если ПравоДоступа("Вывод", Метаданные.Справочники.Банки,) Тогда
        ПроверкаВыводаБанки = Истина;
    КонецЕсли;