Проблема с привелегиями на объект

Автор Хомутов, 02.12.08, 10:25:50

« назад - далее »

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

Хомутов

Здравтсвуйте, есть проблема.

Пользователь создает объект, потом на этот объект раздаются привелегии с максимальным уровнем доступа некоторым другим пользователям из разных пользовательский групп.

Объект находится в некотором состоянии.

Далее, понадобилось понизить максимальный уровень доступа для некорой пользовательской группы. И тут выяснилось, что среди "привелегированных" пользователей есть такие, которые входят в эту группу, в том числе и создатель объекта о котором говорилось выше.
Оказывается для всех этих пользователей делегированные права доступа на объект остались без изменений !!!!

Пытался исправить это дело програмным образом.
С помощью  GetInfoAboutVersion определял уровень привелегий на объект и разрешенный уровень доступа inMode = 8 и inMode = 11
Потом с помощью UpGrantOnVersion исправлял ошибку.

Всех кроме владельцев исправил.

Как корректировать права владельца?

Дмитрий

Создатель объекта всегда имеет полный доступ к объекту. Изменить уровень доступа  создателя к объекту можно только сменой состояния.

Хомутов

Тогда напрашивается другой вопрос :)
сменить состояние можно только "вперед". Список следующих состояний я получить могу....
Проблема в том, что нужно же все-таки вернуть объект в исходное состояние. А это не всегда возможно, да и маршрут переходов из состояния в состояние нужно знать заранее.

Прежде чем начинать менять состояние объекта, нужно перебрать кучу различных маршрутов и выбрать тот, в котором конечное состояние будет соответствовать начальному.

Как сформировать "маршрут" изменения состояний объекта?

Хомутов

Кажется есть способ  :)
в базе данных есть пользовательская функция fnGetAvailableStates2(@type_id int, @state_id int)
она возвращает набор данных с одним полем [inIdState]

А о том как воспользоватсья этой функцией, не подключаясь к БД непосредственно, написано тут:
http://forum.ascon.ru/index.php/topic,12560.msg67811.html#msg67811

Таким образом зная состояние, в котором может находиться объект в любой момент времени, можно наити любое состояние, в кокое может перейти этот объект, за конечное число изменений состояний.

Если есть другой способ, будурад услышать.

YorikER

Сталкивались с такой проблемой (необходимость вернуться в предыдущее состояние), решили так. Есть маршрут состояний: Проектирование->Согласование->Утвержден->Архив->Аннулирован. После Аннулирован в качестве следующего устанавливаем в Конфигураторе Проектирование... Если кто-то совершил ошибку - прокручиваем весь список и приходим к первоначальному состоянию... Кроме этого создание новой версии - новая версия создается в предыдущем состоянии, старую версию можно просто удалить или перевести в состояние Аннулирован...