Как получить список пользователей имеющих права на объект?

Здесь обсуждаем систему TDM/PDM/Workflow Lotsia PDM PLUS (PartY PLUS).
Ответить
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Как получить список пользователей имеющих права на объект?

Сообщение Александр »

Может кто уже делал?

Проблема простая...
продолжая скрывать от конечного пользователя тяжелый интерфейс Лоции нужно либо в действии либо в шаблоне через функции получить либо список либо массив пользователей имеющих права на защищенный объект (при условии что объект находится в зоне видимости пользователя)

Вызов контектстного меню в нашей идеологии не приветствуется.
Нужно - нажал свою кнопку увидел кто владеет объектом - попросил его дать права и себе. (Просто в действии/шаблоне можно предложить дополнительный сервис по управлению правами)

Сечас вижу только один путь-точнее не вижу ни одного :? Как минимально короткими функциями пробежаться по всем юзерам базы и отобрать всех - кто причастен к объекту? :roll:

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Старик Крупский
Активный участник
Сообщения: 803
Зарегистрирован: 27 июл 2006, 22:17
Откуда: Москва

Сообщение Старик Крупский »

Когда работаешь с базой, самый короткий путь - прямой запрос. По id объекта найти его администратора несложно. Вот только зачем, если можно сразу попросить администратора. А еще можно при установке прав сразу записывать в атрибут того, кто имеет полные права, но это концептуально неверно.
"Лучше меньше, да лучше" (C)
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

По id объекта найти его администратора несложно
подскажи какой функцией это реализуется? или какой запрос надо построить чтобы вытащить эту информацию?
...ну точно :wink:
Круто, спасибо натолкнул на мысль...

Код: Выделить всё

f_ExecSQL... 
select 
       lsdbo.abuser.fio
from   lsdbo.abuser
where  lsdbo.abuser.empl_id in
       ((select lsdbo.EmplRight_v.user_id
          from lsdbo.EmplRight_v
         where lsdbo.EmplRight_v.objid_n='переменная с кодом текущего объекта' and
               lsdbo.abuser.empl_id <>0 and
               lsdbo.abuser.empl_id is not null))
(никак не перестроюсь на то -что вся инфа-то уже есть где-то в базе) :wink:

А не подскажете какая разница между таблицами/представлениями EmplRight и EmplRight_v - окуда правильно брать информацию из _v или без этой самой _v (в таблице .._v просто добавлены 2 даты)

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Anderyt
Активный участник
Сообщения: 777
Зарегистрирован: 15 июл 2004, 13:15
Используемое ПО: Lotsia PDM PLUS
Откуда: Тюмень
Контактная информация:

Сообщение Anderyt »

разница в том, что простые пользователи могут просматривать представление, а таблицу - НЕ могут. кроме того, представления не редактируются, хотя в этом я не уверен, не проверял. изменяются только таблицы. поэтому Теххелп настоятельно рекомендует использовать в селектах именно представления (виды). селект, в котором участвуют ТАБЛИЦЫ, а не виды, у простого пользователя НЕ выполнится.
лучше день потерять, потом за пять минут долететь!
Аватара пользователя
Anderyt
Активный участник
Сообщения: 777
Зарегистрирован: 15 июл 2004, 13:15
Используемое ПО: Lotsia PDM PLUS
Откуда: Тюмень
Контактная информация:

Сообщение Anderyt »

а кстати, каким образом владелец объекта дает права кому либо? тоже наверно через кнопочку и действие, да? ;-)
лучше день потерять, потом за пять минут долететь!
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

мысль следующая...
видим объект - нажимаем на кнопку 'Access'

Код: Выделить всё

case (права на объект
when 1- видим 'ничей' (свободный) 
    then - забирам себе через автосервер
when 2- видим 10 'владельцев' 
    then - звоним/пишем, просим у одного из них дать права через автосервер или напрямую (наследуемые)
when 3- шеф видит владельцев объекта и говорит 
    then - нет ребята это все мое - и через автосервер отбирает права у всех давая их себе и выбирая из списка приближенных... 
...
и т.д. и т.п.)
End case
:wink: :wink: :wink:
Кстати такой вопрос
есть объект созданный кем-то, ему 100 раз переназначили/удалили/добавили права
устория по правам пустая он или защищен или общедоступен - не важно, главное что в списке прав ни одного юзера и/или администратора..
К объекту, через автосервер, подключаются юзеры, получая привелегии 'GGGG'.
Сам вопрос может ли кто из этих юзеров дать наследуемые права на объект другому (неподключенному к объекту по правам) юзеру лично/напрямую (не от имени админа) если он не является автором объекта (лицом создавшим его) или все операции присвоения прав на объект не созданный лично -должны проходить от имени админа???

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Anderyt
Активный участник
Сообщения: 777
Зарегистрирован: 15 июл 2004, 13:15
Используемое ПО: Lotsia PDM PLUS
Откуда: Тюмень
Контактная информация:

Сообщение Anderyt »

мысль следующая...
видим объект - нажимаем на кнопку 'Access'
1- видим 'ничей' (свободный) - забирам себе через автосервер
2- видим 10 'владельцев' - звоним/пишем, просим у одного из них дать права через автосервер или напрямую (наследуемые)
3- шеф видит владельцев объекта и говорит - нет ребята это все мое - и через автосервер отбирает права у всех давая их себе и выбирая из списка приближенных...
ого... какая мега-система... :-)
кстати, можно процедуру запроса прав у владельца сделать в виде шаблона ;-)
Сам вопрос может ли кто из этих юзеров дать наследуемые права на объект другому (неподключенному к объекту по правам) юзеру лично/напрямую (не от имени админа) если он не является автором объекта (лицом создавшим его) или все операции присвоения прав на объект не созданный лично -должны проходить от имени админа???
сможет передать, если у этого юзера (который хочет ДАТЬ права) есть права GGGG. права GGGG как раз и определяют возможность передачи прав (для простого полного доступа достаточно прав вида EEEE).
лучше день потерять, потом за пять минут долететь!
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

Слушай Андрей..
я только смирился с неотвратимостью WorkFlow, а ты уже пугаешь новыми словами :wink: :wink:
кстати, можно процедуру запроса прав у владельца сделать в виде шаблона
что это? в двух словах плиз, по данному контексту :wink:

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Anderyt
Активный участник
Сообщения: 777
Зарегистрирован: 15 июл 2004, 13:15
Используемое ПО: Lotsia PDM PLUS
Откуда: Тюмень
Контактная информация:

Сообщение Anderyt »

сорри, не сказал полностью :-)
я как раз имел в виду шаблон работы, то есть шаблон Воркфлоу :-)
думаю, если говорить о "пишет владельцу объекта и просит дать права" - то самое удобное - сделать шаблон.
в этом шаблоне (который, кстати, можно запускать из действия по проверке прав у текущего объекта, если текущий юзер этого захочет) можно устроить пересылку текущего объекта одному из юзеров, у которых есть права передачи прав (можно сделать список только из нескольких конкретных фамилий, если владельцев объекта несколько, чтобы текущий юзер сам выбрал, кто ему больше нравится), и потом, когда выбранный владелец получит сообщение с этим объектом, сделать возможность давать определенные наборы прав в несколько кликов, мощный интерфейс докооборота это позволит сделать, не создавая для этого хранимых процедур ;-). и владельцу объекта даже не придется выбирать юзера, которому он хочет дать права, так как в шаблоне уже будет записан инициатор процесса. опять же, в том же шаблоне можно предусмотреть разные варианты, может быть, владелец объекта не захочет давать права, или вообще, захочет забрать у всех права на полученный объект ;-)
лучше день потерять, потом за пять минут долететь!
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

Продолжаем разговор... :wink:
А как сделать с помощью SQL запроса назначение прав на существующее/открытое дерево проекта - т.е. включая все дочерние объекты с их дочерними объектами и т.д.

Т.е. у меня есть дерево проекта

Код: Выделить всё

1.Клиент
  1.1Контактные лица 
     1.1.1Контактное лицо 1
     1.1.2Контактное лицо 2
     ...
  1.2 Запросы
     1.2.1 Запрос 1
     1.2.2 Запрос 2
     ...
Тут возникает 2 вопроса
1- Общая структура была общедоступна. Далее в разное время разными людьми она наполнялась общедоступными и защищенными объектами
Вопрос: как одним запросом (допустим через автосервер) удалить все существующие права на все объекты и отдать их одному пользователю-шефу? Может есть операция - дать права для дерева проекта (включая все внутренности)?

2- Допустим Запрос 1 был защищен и дополнительно находится(входимость) в объекте План работ юзера1, а запрос 2 соответственно у юзера2, причем из этих объектов есть прямой выход на объект Клиент (через кнопку по ID объекта)
Если шеф забрал права только на объект Клиент не трогая дочерние объекты то юзеры 1 и 2 при попытке открыть родительский объект - получают ошибку Лоции (действие не выполняется - объекта не существует, объект для них стал не видим).
Вопрос: Существует ли простой способ имея в своем распоряжении ID объекта понять доступен ли он для этого юзера или нет? Не анализируя список лиц подключенных к объекту? Есть ли в характеристиках(таблице) объекта такой признак?

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Anderyt
Активный участник
Сообщения: 777
Зарегистрирован: 15 июл 2004, 13:15
Используемое ПО: Lotsia PDM PLUS
Откуда: Тюмень
Контактная информация:

Сообщение Anderyt »

ух ты, все интереснее и интереснее :-)
1 Вопрос: как одним запросом (допустим через автосервер) удалить все существующие права на все объекты и отдать их одному пользователю-шефу? Может есть операция - дать права для дерева проекта (включая все внутренности)?
возможно, помогут наследуемые права. но с ними надо аккуратно, они имееют приоретиет над обычными правами и есть еще какие то тонкости с документами архива, на них они тоже наследуются. у меня опыта в этой области нету, мы обходимся без наследуемых прав... а если говорить о простых правах - то проблему можно решить с помощью действия над объектами, которое будет запускаться для каждого объекта, входящего в проект, удалять у него все права, а потом двать нужные... основной вопрос - как получить список ИД объектов, входящих в проект... :-( возможно, поможет какая то хитрая хранимая процедура...
2 Вопрос: Существует ли простой способ имея в своем распоряжении ID объекта понять доступен ли он для этого юзера или нет? Не анализируя список лиц подключенных к объекту? Есть ли в характеристиках(таблице) объекта такой признак?
но доступность определяется как раз списком прав на текущий объект. если "список прав на объект" есть "список лиц подключенных к объекту", то, скорее всего, не анализируя этот список, доступность не определить...
лучше день потерять, потом за пять минут долететь!
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

Слушай а не поможешь понять следующую весчь, в свое время у техподдержки спрашивал как установить атрибут всем дочерним объектам первого уровня - они дали код

Код: Выделить всё

str_id = Set ( f_execsqlselect ('

SELECT 
       max (OBJ_REF.id) 
  FROM LSDBO.attrib_value_view ATR_V,
       LSDBO.Value_string_view V_STR,
       LSDBO.tree_link_view TREE_LNK,
       LSDBO.object_reference_view OBJ_REF 
 WHERE TREE_LNK.parent_id =' +  < переменная с кодом текущего объекта> + ' AND
       TREE_LNK.link_type_id = 1 and
       OBJ_REF.id = TREE_LNK.link_id AND
       OBJ_REF.type_id = <id типа объекта продукта> AND
       ATR_V.Attrib_ID = <id атрибута статус> AND
       V_STR.Attrib_ID = <id атрибута статус> and
       ATR_V.object_id = obj_ref.id AND
       V_STR.id = ATR_V.value_id AND V_STR.value <> ~'Исполнен~''

, '', '') )
Какие тут определяющие условия, в плане анализа глубины вложенности
я так понял
TREE_LNK.link_type_id = 1 - определяет первый уровень, а вот как бы сделать запрос на все уровни...? Да и вытащить все дочерние ID.
при условии что длина текста не должна превышать 1600 знаков (столкнулся с этим ограничением в выражении для вычисляемого поля (обещали убрать) но может и здесь то-же самое)

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

и еще момент по предыдущему
но доступность определяется как раз списком прав на текущий объект. если "список прав на объект" есть "список лиц подключенных к объекту", то, скорее всего, не анализируя этот список, доступность не определить...
анализ списка юзеров объекта по большому счету бесполезен в данном случае :?
т.е. я проверяю входит ли текуший пользователь в список и получается
- что если объект открыт - пользователь туда не входит (ответ не верный т.к. он видит объект и может выйти на него через ID)
- если объект закрыт - то все ок

И собственно как понять, что для него - объект закрыт или открыт, не используя список пользователей, а опираясь на что-то другое?

PS Слушай я тебя от работы не отвлекаю? :? Ведь у меня вопросов в запасе миллион :wink:

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

все сам нашел object_reference.common_type
'Y'- общедоступный
'P'- защищенный (кстати в документации 'N')
Последний раз редактировалось Александр 23 ноя 2006, 12:32, всего редактировалось 1 раз.

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Anderyt
Активный участник
Сообщения: 777
Зарегистрирован: 15 июл 2004, 13:15
Используемое ПО: Lotsia PDM PLUS
Откуда: Тюмень
Контактная информация:

Сообщение Anderyt »

'Y'- общедоступный
'P'- защищенный (стати в документации 'N')
опа... а вот про этот переключатель я как то не подумал даже :-(
и кстати да, если юзер видит объект, то конечно у него есть право на доступ к нему, то есть в списке прав есть его ФИО.. хотя он так же может видеть объект, если входит в группу, которая есть в этом списке прав.....
а вот по поводу определяющего условия все таки скажу :-)

Код: Выделить всё

WHERE 
TREE_LNK.parent_id = <Obj_ID> 
AND 
TREE_LNK.link_type_id = 1
эти условия отбирает те объекты, которые входят в объект с ИД = Obj_ID по типу связи с ИД = 1, а это скорее всего именно дерево проектов.

PS. да нет, не отвлекаете :-) хотя нужно готовиться к Техникону ;-) ...
лучше день потерять, потом за пять минут долететь!
Ответить