Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
10 авг 2022, 23:36

Роли пользователей

Автор Dmitry Qwe, 25 окт 2017, 20:59

0 Пользователей и 1 гость просматривают эту тему.

Dmitry Qwe

Условно:
Есть пользователь с двумя установленными ролями: Сотр - имеет возможность чтения справочник1 и АдминNew - имеет полные права

Хочу сделать проверку, если у текущего пользователя нету прав доступа на чтение, то выдавалось бы ошибка, а если у пользователя установлено несколько вышеуказанных ролей то выводить допустим сообщение "Доступ"



Функция Тест() Экспорт

Роли = ПользователиИнформационнойБазы.ТекущийПользователь().Роли;

Для каждого роль из роли цикл
Если ПравоДоступа("Чтение",Метаданные.Справочники.Справочник1,Роль) и ПравоДоступа("Изменение",Метаданные.Справочники.Справочник1,Роль) Тогда
Прервать;

Иначе
Возврат Неопределено;
КонецЕсли;
КонецЦикла;


              Сообщить("Доступ");
КонецФункции

В данной функции анализируются роли текущего пользователя, но как только проверяется первая роль, тобишь "сотр" он там находит право доступа только на чтение и функция завершается, как продолжить анализировать следующие роли пользователей при том что если найдется пользователь с правами доступа указанными в условии выведется сообщение?

P.S. Можно в иначе добавить продолжить, но мне нужно чтобы если у пользователя было только одна роль (сотр) с правом на чтение то выдавалось бы ошибка

oleg-x


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

Добавлено: 25 окт 2017, 21:15


Может что то вроде этого?
Функция Тест() Экспорт   
    Роли = ПользователиИнформационнойБазы.ТекущийПользователь().Роли;
    КолВоРолей = 0;
    НетРолей = 0;
    Для каждого роль из роли цикл
        Если ПравоДоступа("Чтение",Метаданные.Справочники.Справочник1,Роль) и ПравоДоступа("Изменение",Метаданные.Справочники.Справочник1,Роль) Тогда
            КолВоРолей = КолВоРолей +1;
        Иначе
            НетРолей = НетРолей +1;
        КонецЕсли;
    КонецЦикла;
        Если КолВоРолей = "" тогда
            //Выполнить условие
        КонецЕсли;
        Если НетРолей = "" тогда
            //Выполнить условие
        КонецЕсли;
КонецФункции
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

Dmitry Qwe

oleg-x, ошибся, вообщем вот что мне нужно:
Сперва мы проверяем роль "Сотр" с правом на чтение, условию нашему она не совпадает поэтому нужно проверять следующие роли на наличие данных прав если таких ролей нет то выводим доспустим "нет прав"

Добавлено: 25 окт 2017, 22:45


А можно это как-то в цикле все организовать? Т.е если есть у нас роль с нужными правами то ненужно дальше искать, если такую не нашли ищем дальше, если в итоге так и не нашли то прекращаем выполнять функцию( возврат неопределено, например)?

AIFrame

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

alex0402

можно сделать так:
Функция Тест() Экспорт
    Роли = ПользователиИнформационнойБазы.ТекущийПользователь().Роли;

    Право = Новый Структура;

    ЕстьДоступ = ЛОЖЬ;   
    Для каждого роль из роли цикл
        Если ПравоДоступа("Чтение",Метаданные.Справочники.Справочник1,Роль) и ПравоДоступа("Изменение",Метаданные.Справочники.Справочник1,Роль) Тогда
            СписокРолей.Вставить("Чтение",Истина);
        Иначе
            //проверка других ролей
        КонецЕсли;
    КонецЦикла;

    Чтение = Ноепределено;
    Если Не Право.Свойство("Чтение",Чтение)  Тогда
        Возврат Ложь
    Иначе
        Возарат Право.Чтение
    КонецЕсли;
КонецФункции
Спасибо за Сказать спасибо

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск