core-jgi/db/maintain/Maintenance/AD_Window_Access.sql

90 lines
3.1 KiB
SQL

/**
* Fill AD_Window_Access for all Roles
* ---------------------------------------------------------------------------
* SCO# Levels S__ 100 4 System info
* SCO 111 7 System shared info
* SC_ 110 6 System/Client info
* _CO 011 3 Client shared info
* __O 001 1 Organization info
* Roles:
* S 4,7,6
* _CO 7,6,3,1
* __O 3,1,7
*/
DECLARE
CURSOR Cur_Role IS
SELECT * FROM AD_Role;
BEGIN
FOR r IN Cur_Role LOOP
DBMS_OUTPUT.PUT_LINE('Role: ' || r.Name || ', Level=' || r.UserLevel);
-- --
IF (r.UserLevel='S') THEN
DELETE AD_Window_Access
WHERE AD_Role_ID = r.AD_Role_ID;
--
INSERT INTO AD_Window_Access
(AD_Window_ID, AD_Role_ID,
AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy,
IsReadWrite)
SELECT DISTINCT w.AD_Window_ID, r.AD_Role_ID,
r.AD_CLIENT_ID, r.AD_ORG_ID, 'Y', SysDate, 0, SysDate, 0,
'Y'
FROM AD_Window w, AD_Tab t, AD_Table tt
WHERE w.AD_Window_ID=t.AD_Window_ID
AND t.AD_Table_ID=tt.AD_Table_ID
AND tt.AccessLevel IN ('4','7','6')
AND t.SeqNo=(SELECT MIN(SeqNo) FROM AD_Tab xt -- only check first tab
WHERE xt.AD_Window_ID=w.AD_Window_ID)
AND NOT EXISTS (SELECT * FROM AD_Window_Access wa
WHERE wa.AD_Window_ID=w.AD_Window_ID AND wa.AD_Role_ID=r.AD_Role_ID);
DBMS_OUTPUT.PUT_LINE(' > Windows ' || SQL%ROWCOUNT);
-- --
ELSIF (r.UserLevel=' CO') THEN
DELETE AD_Window_Access
WHERE AD_Role_ID = r.AD_Role_ID;
--
INSERT INTO AD_Window_Access
(AD_Window_ID, AD_Role_ID,
AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy,
IsReadWrite)
SELECT DISTINCT w.AD_Window_ID, r.AD_Role_ID,
r.AD_CLIENT_ID, r.AD_ORG_ID, 'Y', SysDate, 0, SysDate, 0,
'Y'
FROM AD_Window w, AD_Tab t, AD_Table tt
WHERE w.AD_Window_ID=t.AD_Window_ID
AND t.AD_Table_ID=tt.AD_Table_ID
AND tt.AccessLevel IN ('7','6','2','3','1')
AND t.SeqNo=(SELECT MIN(SeqNo) FROM AD_Tab xt -- only check first tab
WHERE xt.AD_Window_ID=w.AD_Window_ID)
AND NOT EXISTS (SELECT * FROM AD_Window_Access wa
WHERE wa.AD_Window_ID=w.AD_Window_ID AND wa.AD_Role_ID=r.AD_Role_ID);
DBMS_OUTPUT.PUT_LINE(' > Windows ' || SQL%ROWCOUNT);
-- --
ELSIF (r.UserLevel=' O') THEN
DELETE AD_Window_Access
WHERE AD_Role_ID = r.AD_Role_ID;
--
INSERT INTO AD_Window_Access
(AD_Window_ID, AD_Role_ID,
AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy,
IsReadWrite)
SELECT DISTINCT w.AD_Window_ID, r.AD_Role_ID,
r.AD_CLIENT_ID, r.AD_ORG_ID, 'Y', SysDate, 0, SysDate, 0,
'Y'
FROM AD_Window w, AD_Tab t, AD_Table tt
WHERE w.AD_Window_ID=t.AD_Window_ID
AND t.AD_Table_ID=tt.AD_Table_ID
AND tt.AccessLevel IN ('3','1','7')
AND t.SeqNo=(SELECT MIN(SeqNo) FROM AD_Tab xt -- only check first tab
WHERE xt.AD_Window_ID=w.AD_Window_ID)
AND NOT EXISTS (SELECT * FROM AD_Window_Access wa
WHERE wa.AD_Window_ID=w.AD_Window_ID AND wa.AD_Role_ID=r.AD_Role_ID);
DBMS_OUTPUT.PUT_LINE(' > Windows ' || SQL%ROWCOUNT);
END IF;
--
COMMIT;
END LOOP;
END;