Как получить список пользователей имеющих права на объект?
- Александр
- Активный участник
- Сообщения: 1652
- Зарегистрирован: 24 авг 2006, 08:06
- Используемое ПО: Lotsia PDM PLUS
- Откуда: 55.745578,37.665825
Как получить список пользователей имеющих права на объект?
Может кто уже делал?
Проблема простая...
продолжая скрывать от конечного пользователя тяжелый интерфейс Лоции нужно либо в действии либо в шаблоне через функции получить либо список либо массив пользователей имеющих права на защищенный объект (при условии что объект находится в зоне видимости пользователя)
Вызов контектстного меню в нашей идеологии не приветствуется.
Нужно - нажал свою кнопку увидел кто владеет объектом - попросил его дать права и себе. (Просто в действии/шаблоне можно предложить дополнительный сервис по управлению правами)
Сечас вижу только один путь-точнее не вижу ни одного Как минимально короткими функциями пробежаться по всем юзерам базы и отобрать всех - кто причастен к объекту?
Проблема простая...
продолжая скрывать от конечного пользователя тяжелый интерфейс Лоции нужно либо в действии либо в шаблоне через функции получить либо список либо массив пользователей имеющих права на защищенный объект (при условии что объект находится в зоне видимости пользователя)
Вызов контектстного меню в нашей идеологии не приветствуется.
Нужно - нажал свою кнопку увидел кто владеет объектом - попросил его дать права и себе. (Просто в действии/шаблоне можно предложить дополнительный сервис по управлению правами)
Сечас вижу только один путь-точнее не вижу ни одного Как минимально короткими функциями пробежаться по всем юзерам базы и отобрать всех - кто причастен к объекту?
Софт - 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 объекта найти его администратора несложно
...ну точно
Круто, спасибо натолкнул на мысль...
Код: Выделить всё
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))
А не подскажете какая разница между таблицами/представлениями EmplRight и EmplRight_v - окуда правильно брать информацию из _v или без этой самой _v (в таблице .._v просто добавлены 2 даты)
Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный
- Anderyt
- Активный участник
- Сообщения: 777
- Зарегистрирован: 15 июл 2004, 13:15
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Тюмень
- Контактная информация:
разница в том, что простые пользователи могут просматривать представление, а таблицу - НЕ могут. кроме того, представления не редактируются, хотя в этом я не уверен, не проверял. изменяются только таблицы. поэтому Теххелп настоятельно рекомендует использовать в селектах именно представления (виды). селект, в котором участвуют ТАБЛИЦЫ, а не виды, у простого пользователя НЕ выполнится.
лучше день потерять, потом за пять минут долететь!
- Александр
- Активный участник
- Сообщения: 1652
- Зарегистрирован: 24 авг 2006, 08:06
- Используемое ПО: Lotsia PDM PLUS
- Откуда: 55.745578,37.665825
мысль следующая...
видим объект - нажимаем на кнопку 'Access'
Кстати такой вопрос
есть объект созданный кем-то, ему 100 раз переназначили/удалили/добавили права
устория по правам пустая он или защищен или общедоступен - не важно, главное что в списке прав ни одного юзера и/или администратора..
К объекту, через автосервер, подключаются юзеры, получая привелегии 'GGGG'.
Сам вопрос может ли кто из этих юзеров дать наследуемые права на объект другому (неподключенному к объекту по правам) юзеру лично/напрямую (не от имени админа) если он не является автором объекта (лицом создавшим его) или все операции присвоения прав на объект не созданный лично -должны проходить от имени админа???
видим объект - нажимаем на кнопку 'Access'
Код: Выделить всё
case (права на объект
when 1- видим 'ничей' (свободный)
then - забирам себе через автосервер
when 2- видим 10 'владельцев'
then - звоним/пишем, просим у одного из них дать права через автосервер или напрямую (наследуемые)
when 3- шеф видит владельцев объекта и говорит
then - нет ребята это все мое - и через автосервер отбирает права у всех давая их себе и выбирая из списка приближенных...
...
и т.д. и т.п.)
End case
Кстати такой вопрос
есть объект созданный кем-то, ему 100 раз переназначили/удалили/добавили права
устория по правам пустая он или защищен или общедоступен - не важно, главное что в списке прав ни одного юзера и/или администратора..
К объекту, через автосервер, подключаются юзеры, получая привелегии 'GGGG'.
Сам вопрос может ли кто из этих юзеров дать наследуемые права на объект другому (неподключенному к объекту по правам) юзеру лично/напрямую (не от имени админа) если он не является автором объекта (лицом создавшим его) или все операции присвоения прав на объект не созданный лично -должны проходить от имени админа???
Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный
- Anderyt
- Активный участник
- Сообщения: 777
- Зарегистрирован: 15 июл 2004, 13:15
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Тюмень
- Контактная информация:
ого... какая мега-система...мысль следующая...
видим объект - нажимаем на кнопку 'Access'
1- видим 'ничей' (свободный) - забирам себе через автосервер
2- видим 10 'владельцев' - звоним/пишем, просим у одного из них дать права через автосервер или напрямую (наследуемые)
3- шеф видит владельцев объекта и говорит - нет ребята это все мое - и через автосервер отбирает права у всех давая их себе и выбирая из списка приближенных...
кстати, можно процедуру запроса прав у владельца сделать в виде шаблона
сможет передать, если у этого юзера (который хочет ДАТЬ права) есть права GGGG. права GGGG как раз и определяют возможность передачи прав (для простого полного доступа достаточно прав вида EEEE).Сам вопрос может ли кто из этих юзеров дать наследуемые права на объект другому (неподключенному к объекту по правам) юзеру лично/напрямую (не от имени админа) если он не является автором объекта (лицом создавшим его) или все операции присвоения прав на объект не созданный лично -должны проходить от имени админа???
лучше день потерять, потом за пять минут долететь!
- Александр
- Активный участник
- Сообщения: 1652
- Зарегистрирован: 24 авг 2006, 08:06
- Используемое ПО: Lotsia PDM PLUS
- Откуда: 55.745578,37.665825
Слушай Андрей..
я только смирился с неотвратимостью WorkFlow, а ты уже пугаешь новыми словами
я только смирился с неотвратимостью WorkFlow, а ты уже пугаешь новыми словами
что это? в двух словах плиз, по данному контекстукстати, можно процедуру запроса прав у владельца сделать в виде шаблона
Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный
- Anderyt
- Активный участник
- Сообщения: 777
- Зарегистрирован: 15 июл 2004, 13:15
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Тюмень
- Контактная информация:
сорри, не сказал полностью
я как раз имел в виду шаблон работы, то есть шаблон Воркфлоу
думаю, если говорить о "пишет владельцу объекта и просит дать права" - то самое удобное - сделать шаблон.
в этом шаблоне (который, кстати, можно запускать из действия по проверке прав у текущего объекта, если текущий юзер этого захочет) можно устроить пересылку текущего объекта одному из юзеров, у которых есть права передачи прав (можно сделать список только из нескольких конкретных фамилий, если владельцев объекта несколько, чтобы текущий юзер сам выбрал, кто ему больше нравится), и потом, когда выбранный владелец получит сообщение с этим объектом, сделать возможность давать определенные наборы прав в несколько кликов, мощный интерфейс докооборота это позволит сделать, не создавая для этого хранимых процедур . и владельцу объекта даже не придется выбирать юзера, которому он хочет дать права, так как в шаблоне уже будет записан инициатор процесса. опять же, в том же шаблоне можно предусмотреть разные варианты, может быть, владелец объекта не захочет давать права, или вообще, захочет забрать у всех права на полученный объект
я как раз имел в виду шаблон работы, то есть шаблон Воркфлоу
думаю, если говорить о "пишет владельцу объекта и просит дать права" - то самое удобное - сделать шаблон.
в этом шаблоне (который, кстати, можно запускать из действия по проверке прав у текущего объекта, если текущий юзер этого захочет) можно устроить пересылку текущего объекта одному из юзеров, у которых есть права передачи прав (можно сделать список только из нескольких конкретных фамилий, если владельцев объекта несколько, чтобы текущий юзер сам выбрал, кто ему больше нравится), и потом, когда выбранный владелец получит сообщение с этим объектом, сделать возможность давать определенные наборы прав в несколько кликов, мощный интерфейс докооборота это позволит сделать, не создавая для этого хранимых процедур . и владельцу объекта даже не придется выбирать юзера, которому он хочет дать права, так как в шаблоне уже будет записан инициатор процесса. опять же, в том же шаблоне можно предусмотреть разные варианты, может быть, владелец объекта не захочет давать права, или вообще, захочет забрать у всех права на полученный объект
лучше день потерять, потом за пять минут долететь!
- Александр
- Активный участник
- Сообщения: 1652
- Зарегистрирован: 24 авг 2006, 08:06
- Используемое ПО: Lotsia PDM PLUS
- Откуда: 55.745578,37.665825
Продолжаем разговор...
А как сделать с помощью SQL запроса назначение прав на существующее/открытое дерево проекта - т.е. включая все дочерние объекты с их дочерними объектами и т.д.
Т.е. у меня есть дерево проекта
Тут возникает 2 вопроса
1- Общая структура была общедоступна. Далее в разное время разными людьми она наполнялась общедоступными и защищенными объектами
Вопрос: как одним запросом (допустим через автосервер) удалить все существующие права на все объекты и отдать их одному пользователю-шефу? Может есть операция - дать права для дерева проекта (включая все внутренности)?
2- Допустим Запрос 1 был защищен и дополнительно находится(входимость) в объекте План работ юзера1, а запрос 2 соответственно у юзера2, причем из этих объектов есть прямой выход на объект Клиент (через кнопку по ID объекта)
Если шеф забрал права только на объект Клиент не трогая дочерние объекты то юзеры 1 и 2 при попытке открыть родительский объект - получают ошибку Лоции (действие не выполняется - объекта не существует, объект для них стал не видим).
Вопрос: Существует ли простой способ имея в своем распоряжении ID объекта понять доступен ли он для этого юзера или нет? Не анализируя список лиц подключенных к объекту? Есть ли в характеристиках(таблице) объекта такой признак?
А как сделать с помощью SQL запроса назначение прав на существующее/открытое дерево проекта - т.е. включая все дочерние объекты с их дочерними объектами и т.д.
Т.е. у меня есть дерево проекта
Код: Выделить всё
1.Клиент
1.1Контактные лица
1.1.1Контактное лицо 1
1.1.2Контактное лицо 2
...
1.2 Запросы
1.2.1 Запрос 1
1.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
- Откуда: Тюмень
- Контактная информация:
ух ты, все интереснее и интереснее
возможно, помогут наследуемые права. но с ними надо аккуратно, они имееют приоретиет над обычными правами и есть еще какие то тонкости с документами архива, на них они тоже наследуются. у меня опыта в этой области нету, мы обходимся без наследуемых прав... а если говорить о простых правах - то проблему можно решить с помощью действия над объектами, которое будет запускаться для каждого объекта, входящего в проект, удалять у него все права, а потом двать нужные... основной вопрос - как получить список ИД объектов, входящих в проект... возможно, поможет какая то хитрая хранимая процедура...1 Вопрос: как одним запросом (допустим через автосервер) удалить все существующие права на все объекты и отдать их одному пользователю-шефу? Может есть операция - дать права для дерева проекта (включая все внутренности)?
но доступность определяется как раз списком прав на текущий объект. если "список прав на объект" есть "список лиц подключенных к объекту", то, скорее всего, не анализируя этот список, доступность не определить...2 Вопрос: Существует ли простой способ имея в своем распоряжении ID объекта понять доступен ли он для этого юзера или нет? Не анализируя список лиц подключенных к объекту? Есть ли в характеристиках(таблице) объекта такой признак?
лучше день потерять, потом за пять минут долететь!
- Александр
- Активный участник
- Сообщения: 1652
- Зарегистрирован: 24 авг 2006, 08:06
- Используемое ПО: Lotsia PDM PLUS
- Откуда: 55.745578,37.665825
Слушай а не поможешь понять следующую весчь, в свое время у техподдержки спрашивал как установить атрибут всем дочерним объектам первого уровня - они дали код
Какие тут определяющие условия, в плане анализа глубины вложенности
я так понял
TREE_LNK.link_type_id = 1 - определяет первый уровень, а вот как бы сделать запрос на все уровни...? Да и вытащить все дочерние ID.
при условии что длина текста не должна превышать 1600 знаков (столкнулся с этим ограничением в выражении для вычисляемого поля (обещали убрать) но может и здесь то-же самое)
Код: Выделить всё
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 Слушай я тебя от работы не отвлекаю? Ведь у меня вопросов в запасе миллион
анализ списка юзеров объекта по большому счету бесполезен в данном случаено доступность определяется как раз списком прав на текущий объект. если "список прав на объект" есть "список лиц подключенных к объекту", то, скорее всего, не анализируя этот список, доступность не определить...
т.е. я проверяю входит ли текуший пользователь в список и получается
- что если объект открыт - пользователь туда не входит (ответ не верный т.к. он видит объект и может выйти на него через ID)
- если объект закрыт - то все ок
И собственно как понять, что для него - объект закрыт или открыт, не используя список пользователей, а опираясь на что-то другое?
PS Слушай я тебя от работы не отвлекаю? Ведь у меня вопросов в запасе миллион
Софт - 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')
'Y'- общедоступный
'P'- защищенный (кстати в документации 'N')
Последний раз редактировалось Александр 23 ноя 2006, 12:32, всего редактировалось 1 раз.
Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный
- Anderyt
- Активный участник
- Сообщения: 777
- Зарегистрирован: 15 июл 2004, 13:15
- Используемое ПО: Lotsia PDM PLUS
- Откуда: Тюмень
- Контактная информация:
опа... а вот про этот переключатель я как то не подумал даже'Y'- общедоступный
'P'- защищенный (стати в документации 'N')
и кстати да, если юзер видит объект, то конечно у него есть право на доступ к нему, то есть в списке прав есть его ФИО.. хотя он так же может видеть объект, если входит в группу, которая есть в этом списке прав.....
а вот по поводу определяющего условия все таки скажу
Код: Выделить всё
WHERE
TREE_LNK.parent_id = <Obj_ID>
AND
TREE_LNK.link_type_id = 1
PS. да нет, не отвлекаете хотя нужно готовиться к Техникону ...
лучше день потерять, потом за пять минут долететь!