[ОТВЕТИТЬ]
Опции темы
11.01.2008 13:50  
askon
Здравствуйте.


Есть задача по автоматизации назначения прав доступа к функциям

"Просмотр остатков и резервов"
"Просмотр документов по артикулу"

модуля "Карточки складского учета" для всех должностей магазина,
кроме "Ревизор" и "Админ".

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

Мы хотим, чтобы этим у нас занимался ревизор. Давать ревизору доступ
к административному модулю мы не хотим.

Подскажите пожалуйста, какие функции супермага обеспечивают указанную
функциональность, чтобы мы могли запускать их из своего пакета под ORACL'ом.
Интерфейс для их запуска сделаем сами.

Поиск в объектах базы привел к таблицам SMGrantedFunctions, smgrantedmodules,
smoffcfg, smclientapps, smclientfunctions, также к функциям
admincore.installfunction, Office.CanUseFunction.

Осталось неясным параметры функции admincore.installfunction и какая(/какие)
функции нужны для запрета доступа.

Просьба помочь.
 
11.01.2008 14:00  
Mtirt
Я бы сделала так.
Завела две должности, например, "оператор" и "оператор во время ревизии". Для второй должности как раз убрала бы необходимые функции.

И скриптом меняла бы перед ревизией код должности для сотрудника в таблице SMStaff. Лучше всего, конечно, перед запуском скрипта убедиться, что все из Супермага вышли...
 
11.01.2008 14:28  
askon
На магазине несколько должностей. Дублировать каждую и потом сопровождать - не праздник. Хочется погибче-бы.
 
11.01.2008 14:53  
Mtirt
Если бы разговор шел о двух десятках должностей, согласилась бы...
Но там явно не больше 3-5 штук. Причем скорей всего можно на время ревизии их все свести к одной должности...

Просто разбираться с SMGrantedFunctions по-моему еще геморойнее.
 
16.01.2008 09:00  
askon
Цитата:
Сообщение от Mtirt
Если бы разговор шел о двух десятках должностей, согласилась бы...
Но там явно не больше 3-5 штук. Причем скорей всего можно на время ревизии их все свести к одной должности...

Просто разбираться с SMGrantedFunctions по-моему еще геморойнее.
Это кривее геморроя.
Вот решение. И без геморроя. Пользуйтесь на здоровье.

declare
Access_Checked number;
Set_Value supermag.smgrantedfunctions.daysbefore%type;

cursor Grant_Function_Cursor (Access in number)
is

/* функции модулей, привязанных к должностям */
select u.id posid, a.functionid
from supermag.smoffcfg u
, supermag.smgrantedmodules m
, supermag.smappaccess a
, supermag.smgrantedfunctions f
where u.orarole not in ('admin','SUPERMAG_ADMIN_GROUP')
and m.posid = u.id
and a.appid = m.appid
/* Модули: 6 ("Карточки складского учета"), 12 ("Отчеты") */
and m.appid in (6,12)
and a.functionid in (620,606,1205,1239,1279,1284,1295)
and f.posid = u.id
and f.funcid = a.functionid
and decode (f.daysbefore, 0, 0, 1) = Access;

r Grant_Function_Cursor%rowtype;

begin

select 1 into Access_Checked from dual;
select 0 into Set_Value from dual;

if :New_Access = 1 then
select 0 into Access_Checked from dual;
select null into Set_Value from dual;
end if;

/* установка доступа к функциям */

open Grant_Function_Cursor (Access_Checked);
loop
Fetch Grant_Function_Cursor into r;
Exit When Grant_Function_Cursor%Notfound;

update supermag.smgrantedfunctions t
set t.daysbefore = Set_Value
where t.posid = r.posid
and t.funcid = r.functionid;

end loop;
close Grant_Function_Cursor;

/* установка доступа к модулю 28 ("Остатки") */

update supermag.smgrantedmodules t
set t.daysbefore = Set_Value
where t.appid = 28
and t.posid in
(
select u.id
from supermag.smoffcfg u
, supermag.smgrantedmodules m
where u.orarole not in ('admin','SUPERMAG_ADMIN_GROUP')
and m.posid = u.id
and m.appid = 28
);

exception
When others then
If Grant_Function_Cursor%IsOpen Then
Close Grant_Function_Cursor;
end if;

end;
 
 
Опции темы



Часовой пояс GMT +3, время: 11:37.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.