7.7 Права на метаданные

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем FCV, 27 дек 2007.

  1. TopicStarter Overlay
    FCV
    Offline

    FCV

    Регистрация:
    26 дек 2007
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Помогите, пожалуйста, знающие люди, как выцепить значение прав доступа на объект метаданных программным путем?
  2. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    ПравоДоступа(<?>,)
    Синтаксис:
    ПравоДоступа(<НазваниеПрава>,<Объект>)
    Назначение:
    Проверяет для текущего пользователя наличие права доступа для заданного объекта. Возвращает: 1 - если право доступа есть, иначе 0.
    Параметры:
    <НазваниеПрава> - строка с названием права доступа, как оно выводится в конфигурации (без пробелов).
    <Объект> - строка с наименованием типа и вида объекта (записывается через точку). Для глобальных прав этот параметр не указывается. Для объектов, у которых нет вида - записывается только тип объекта, например, ''Операция''
  3. GrayMagellan
    Offline

    GrayMagellan

    Регистрация:
    6 фев 2008
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте!

    Хотел использовать данную функцию встроенного языка: ПравоДоступа("НазваниеПрава","Константа.ИмяКонстанты"). Написал такой код:

    Код:
    ТипОбъекта = "Константа." + ИмяОбъекта;
    
    Если (ПравоДоступа("Чтение",ТипОбъекта) = 0) И (ПравоДоступа("Корректировка", ТипОбъекта) = 0) Тогда
    Таб.ВывестиСекцию("СтрокаНетПрав");
    ИначеЕсли (ПравоДоступа("Чтение",ТипОбъекта) = 1) И (ПравоДоступа("Корректировка", ТипОбъекта) = 0) Тогда
    Таб.ВывестиСекцию("СтрокаЧтение");
    ИначеЕсли (ПравоДоступа("Чтение",ТипОбъекта) = 1) И (ПравоДоступа("Корректировка", ТипОбъекта) = 1) Тогда
    Таб.ВывестиСекцию("СтрокаЗапись");
    КонецЕсли;
    
    
    
    
    Однако конструкция дает неправильный результат... Точно знаю, что у текущего пользователя в конфигурации в назначенных ему правах доступа нет никаких прав на доступ к константе "ОбработкаПрошла". Не установлена галочка ни в поле "Чтение", ни в поле "Корректировка". Тем не менее срабатывает последнее условие и выводится строка "СтрокаЗапись". Т.е. программа функция вычисляет, что у него есть и право "Чтение", и право "Корректировка". Релиз платформы 7.70.027. Может кто сталкивался с подобным глюком?
  4. ValeraH
    Offline

    ValeraH

    Регистрация:
    6 фев 2008
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Классика от WildHare (давно это было:) )
    ----------------------------------------------------
    Код:
    Для а=1 по Метаданные.Константа() Цикл
    //===  переберем все константы и вытащим их идентификаторы/синонимы
    ИмяОбъекта=?(Пвид=2,Метаданные.Константа(а).Представление(),Имя(Метаданные.Константа(а).ПолныйИдентификатор()));
    Таб.ВывестиСекцию("Объект|Имя");
    Для б=1 по СписокПрав.РазмерСписка() Цикл
    //===  переберем список прав и выясним, доступно ли каждое из прав текущему пользователю
    Право=ПравоДоступа(СписокПрав.ПолучитьЗначение(б),Метаданные.Константа(а).ПолныйИдентификатор());
    //===  выведем ячейку таблицы с пометкой "+", если право доступно или пустую, если оно не доступно
    Таб.ПрисоединитьСекцию("Объект|Право");
    КонецЦикла;
    КонецЦикла;
    
    
    ---------------------------------------
    Список прав заполнен двумя значениями
  5. GrayMagellan
    Offline

    GrayMagellan

    Регистрация:
    6 фев 2008
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Разобрался сам... Мой код (да и любой подобный код) прекрасно работает... Кора в том, что у юзера стоит галочка "Отключить контроль прав" :). Поэтому отчет и выдавал полные права по всем объектам. Пришлось встроить в начало обработки блок примерно следующего содержания:

    Эй, чувак! В свойствах твоего пользователя стоит "Отключить контроль прав! У тебя уже есть все права! Дальше обработке делать нечего!", после чего осуществляем успешный выход из отчета :)

    Так что функция ПравоДоступа() великолепно работает и без глюков.
  6. пирт
    Offline

    пирт

    Регистрация:
    6 апр 2008
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Привет!

    В продолжение темы: а как в одном сеансе проверить права для всех (!) пользователей, а не только для текущего? И вообще как можно получить список пользователей (не тех, что в справочнике, а тех, что забиты в usrdef)? Естественно, список с правами, а не просто голый список пользователей.
  7. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Спрашивается - "А оно надо?".

    Если уж так сильно необходимо, то реализуется как в ТиС: создается справочик, и в нем регистрируются пользователи.
    Альлтернативный вариант - ручками перебрать "UsrDef\users.usr" либо написать алгоритм его обработки.

    И, если не секрет, для чего такая "хитрая" манипуляция?
  8. пирт
    Offline

    пирт

    Регистрация:
    6 апр 2008
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Надо. Вообщем, UsersDef.dll решил все проблемы.

Поделиться этой страницей