Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3927 dpurdie 1
--------------------------------------------------------
2
--  File created - Thursday-August-01-2013   
3
--------------------------------------------------------
4
--------------------------------------------------------
5
--  DDL for Function IN_LIST_NUMBER
6
--------------------------------------------------------
7
 
8
  CREATE OR REPLACE FUNCTION "IN_LIST_NUMBER" ( sInList IN VARCHAR2 ) RETURN ACCMGR_NUMBER_TAB_t IS
9
 
10
/* ---------------------------------------------------------------------------
11
    Version: 1.0.0
12
   --------------------------------------------------------------------------- */
13
 
14
    sync_rtags		   ACCMGR_NUMBER_TAB_t := ACCMGR_NUMBER_TAB_t();
15
	pos				   NUMBER;
16
	in_list			   VARCHAR2(4000) := sInList || ',';
17
 
18
BEGIN
19
 
20
	IF NOT sInList IS NULL
21
	THEN
22
		LOOP
23
	        EXIT WHEN in_list IS NULL;
24
	        pos := INSTR ( in_list, ',' );
25
	        sync_rtags.extend;
26
	        sync_rtags(sync_rtags.count) := LTRIM ( RTRIM ( SUBSTR ( in_list, 1, pos-1 ) ) );
27
	        in_list := SUBSTR ( in_list, pos+1 );
28
		END LOOP;
29
	END IF;
30
 
31
	RETURN sync_rtags;
32
END IN_LIST_NUMBER;
33
 
34
/
35
 
36
/
37
--------------------------------------------------------
38
--  DDL for Function IS_SAME_STRING
39
--------------------------------------------------------
40
 
41
  CREATE OR REPLACE FUNCTION "IS_SAME_STRING" ( sStringOne IN VARCHAR2,
42
	   	  		  		   				  	sStringTwo IN VARCHAR2 ) RETURN BOOLEAN IS
43
 
44
/* ---------------------------------------------------------------------------
45
    Version: 1.0.0
46
   --------------------------------------------------------------------------- */
47
 
48
ReturnValue BOOLEAN DEFAULT FALSE;
49
 
50
BEGIN
51
 
52
	--- Compare ---
53
	IF ( NVL( sStringOne, '' ) || 'APPEND' = NVL( sStringTwo, '' ) || 'APPEND' ) THEN
54
	   -- Strings are the same
55
	   ReturnValue := TRUE;
56
 
57
	END IF; 
58
 
59
	RETURN ReturnValue;
60
END IS_SAME_STRING;
61
 
62
/
63
 
64
/
65
--------------------------------------------------------
66
--  DDL for Package PK_AMUTILS
67
--------------------------------------------------------
68
 
69
  CREATE OR REPLACE PACKAGE "PK_AMUTILS" IS
70
 
71
	PROCEDURE Log_Access ( nEvent IN LOGIN_TRAIL.ENUM_EVENT%TYPE,
72
			  			   sUserName IN LOGIN_TRAIL.USER_NAME%TYPE,
73
						   sClientIp IN LOGIN_TRAIL.CLIENT_IP%TYPE,
74
						   nAppId IN LOGIN_TRAIL.APP_ID%TYPE,
75
						   sComments IN LOGIN_TRAIL.COMMENTS%TYPE,
76
						   nUserId IN NUMBER DEFAULT NULL );		
77
 
78
	FUNCTION Get_Hash ( sText IN VARCHAR2 ) RETURN VARCHAR2;					   			  						  				  				 
79
 
80
END pk_AMUtils;
81
 
82
/
83
 
84
/
85
--------------------------------------------------------
86
--  DDL for Package PK_APPLICATION
87
--------------------------------------------------------
88
 
89
  CREATE OR REPLACE PACKAGE "PK_APPLICATION" IS
90
 
91
PROCEDURE Add_Application ( sAppName IN APPLICATIONS.APPLICATION_NAME%TYPE,
92
		  				  	sAppAcronym IN APPLICATIONS.ACRONYM%TYPE );
93
 
94
PROCEDURE Remove_Application ( nAppId IN APPLICATIONS.APP_ID%TYPE );							
95
 
96
 
97
END pk_Application;
98
 
99
/
100
 
101
/
102
--------------------------------------------------------
103
--  DDL for Package PK_CONTROL
104
--------------------------------------------------------
105
 
106
  CREATE OR REPLACE PACKAGE "PK_CONTROL" IS
107
 
108
 
109
PROCEDURE Add_Control ( sObjName IN CONTROL_OBJECTS.OBJ_NAME%TYPE,
110
		  		   	  	sObjDescription IN CONTROL_OBJECTS.OBJ_DESCRIPTION%TYPE,
111
					 	nAppId IN CONTROL_OBJECTS.APP_ID%TYPE
112
		  		   	 	); 
113
 
114
PROCEDURE Remove_Control ( sObjIdList IN VARCHAR2 );	
115
 
116
 
117
PROCEDURE Set_Row_Permissions ( nDtId IN DATA_PERMISSIONS.DT_ID%TYPE,
118
							  	nRoleId IN DATA_PERMISSIONS.ROLE_ID%TYPE,
119
							 	nRefCol IN DATA_PERMISSIONS.REF_COLUMN_VAL%TYPE,
120
						     	cIsVisible IN DATA_PERMISSIONS.PERM_VALUE%TYPE DEFAULT NULL,
121
						     	cIsActive IN DATA_PERMISSIONS.PERM_VALUE%TYPE  DEFAULT NULL );
122
 
123
 
124
PROCEDURE Delete_Data_Permission ( nDtId IN DATA_PERMISSIONS.DT_ID%TYPE,
125
								   nRoleId IN DATA_PERMISSIONS.ROLE_ID%TYPE,
126
								   nRefCol IN DATA_PERMISSIONS.REF_COLUMN_VAL%TYPE );
127
 
128
PROCEDURE Add_DataTable ( nObjId IN DATA_TABLES.OBJ_ID%TYPE,
129
						  sTableName IN DATA_TABLES.TABLE_NAME%TYPE,
130
						  sRefColumn IN DATA_TABLES.REF_COLUMN_NAME%TYPE,
131
						  sDisplayColumn IN DATA_TABLES.DISPLAY_COLUMN_NAME%TYPE
132
		  		   	 	);								   
133
 
134
PROCEDURE Remove_DataTable ( DtId IN NUMBER );								   
135
 
136
 
137
 
138
END pk_Control;
139
 
140
/
141
 
142
/
143
--------------------------------------------------------
144
--  DDL for Package PK_ROLE
145
--------------------------------------------------------
146
 
147
  CREATE OR REPLACE PACKAGE "PK_ROLE" IS
148
 
149
 
150
PROCEDURE Add_Role ( sRoleName IN ROLES.ROLE_NAME%TYPE,
151
		  		   	 sRoleComments IN ROLES.COMMENTS%TYPE,
152
				   	 nAppId IN ROLES.APP_ID%TYPE  );  
153
 
154
PROCEDURE Remove_Role ( sRoleIdList IN VARCHAR2 );					 
155
 
156
PROCEDURE Set_Role_Permissions ( nRoleId IN ROLE_PRIVILEGES.ROLE_ID%TYPE,
157
		  					   	 nObjId IN ROLE_PRIVILEGES.OBJ_ID%TYPE,
158
							   	 cIsVisible IN ROLE_PRIVILEGES.PERM_VALUE%TYPE DEFAULT NULL,
159
							   	 cIsActive IN ROLE_PRIVILEGES.PERM_VALUE%TYPE  DEFAULT NULL );
160
 
161
PROCEDURE Set_Role_Variation_Permissions ( nUserId IN USER_ROLES.USER_ID%TYPE,
162
		  								   nAppId IN ROLES.APP_ID%TYPE,
163
										   nRoleId IN ROLES.ROLE_ID%TYPE,
164
		  								   nObjId IN ROLE_PRIVILEGES.OBJ_ID%TYPE,
165
									   	   cIsVisible IN ROLE_PRIVILEGES.PERM_VALUE%TYPE DEFAULT NULL,
166
									   	   cIsActive IN ROLE_PRIVILEGES.PERM_VALUE%TYPE  DEFAULT NULL );
167
 
168
FUNCTION Is_Permissions_Changed ( nRoleId IN ROLE_PRIVILEGES.ROLE_ID%TYPE,
169
  								  nObjId IN ROLE_PRIVILEGES.OBJ_ID%TYPE,
170
							   	  cIsVisible IN ROLE_PRIVILEGES.PERM_VALUE%TYPE,
171
							   	  cIsActive IN ROLE_PRIVILEGES.PERM_VALUE%TYPE ) RETURN BOOLEAN;	
172
 
173
FUNCTION Is_Role_Variation ( nRoleId IN ROLES.ROLE_ID%TYPE ) RETURN BOOLEAN;								  									   								 
174
 
175
PROCEDURE Delete_Role_Permission ( nRoleId IN ROLE_PRIVILEGES.ROLE_ID%TYPE,
176
		  						  nObjId IN ROLE_PRIVILEGES.OBJ_ID%TYPE,
177
								  nPermId IN ROLE_PRIVILEGES.PERM_ID%TYPE );	
178
 
179
PROCEDURE Grant_Role ( sRoleIdList IN VARCHAR2,
180
		  			   nUserId IN USER_ROLES.USER_ID%TYPE );
181
 
182
PROCEDURE Revoke_Role ( sRoleIdList IN VARCHAR2,
183
		  			    nUserId IN USER_ROLES.USER_ID%TYPE );					   								  				  
184
 
185
 
186
END pk_Role;
187
 
188
/
189
 
190
/
191
--------------------------------------------------------
192
--  DDL for Package PK_SECURITY
193
--------------------------------------------------------
194
 
195
  CREATE OR REPLACE PACKAGE "PK_SECURITY" IS      
196
 
197
/*
198
------------------------------
199
||  Last Modified:  S.Vukovic
200
||  Modified Date:  28/Apr/2005  
201
||  Spec Version:   1.0
202
------------------------------
203
*/
204
 
205
	TYPE typeCur IS REF CURSOR;  
206
 
207
    /*================================================================================================*/
208
    --FUNCTION GET_USER_BY_ID ( ID IN NUMBER, records OUT typeCur ) RETURN NUMBER;
209
    --FUNCTION GET_USER_BY_USERNAME ( UserName IN VARCHAR2, records OUT typeCur ) RETURN NUMBER;   
210
    --FUNCTION GET_USER_PERMISSIONS ( UserSK IN NUMBER, ActionNameFilter IN VARCHAR2, records OUT typeCur ) RETURN NUMBER;   
211
    --FUNCTION AUTHENTICATE ( UserName IN VARCHAR2,
212
    --                        UserPassword IN VARCHAR2,
213
    --                       records OUT typeCur ) RETURN NUMBER;
214
    /*================================================================================================*/
215
	PROCEDURE GET_USER_STATIC_PERMISSIONS ( UsedId IN NUMBER, AppId IN NUMBER, RecordSet OUT typeCur);
216
	PROCEDURE GET_USER_DATA_PERMISSIONS ( UsedId IN NUMBER, AppId IN NUMBER, RecordSet OUT typeCur);
217
	FUNCTION IS_LOCAL_PASSWORD_CORRECT ( UserName IN VARCHAR2, UserPassword IN VARCHAR2 ) RETURN NUMBER;
218
	FUNCTION Set_Password ( sUserName IN VARCHAR2, sPasswordA IN VARCHAR2, sPasswordB IN VARCHAR2 ) RETURN NUMBER;
219
	/*================================================================================================*/
220
 
221
END PK_SECURITY;
222
 
223
/
224
 
225
/
226
--------------------------------------------------------
227
--  DDL for Package PK_USER
228
--------------------------------------------------------
229
 
230
  CREATE OR REPLACE PACKAGE "PK_USER" IS
231
/*
232
------------------------------
233
||  Last Modified:  J.Tweddle
234
||  Modified Date:  21/Jan/2008
235
||  Spec Version:   2.1
236
------------------------------
237
*/
238
 
239
PROCEDURE Add_User_Account ( sFullName IN USERS.FULL_NAME%TYPE,
240
		  		   	 	   	 sUserName IN USERS.USER_NAME%TYPE,
241
							 sUserEmail IN USERS.USER_EMAIL%TYPE,
242
							 sDomain IN USERS.DOMAIN%TYPE   );
243
 
244
PROCEDURE Update_User_Account ( sUserId IN VARCHAR2, sFullName IN USERS.FULL_NAME%TYPE,
245
		  		   	 	   	 sUserName IN USERS.USER_NAME%TYPE,
246
							 sUserEmail IN USERS.USER_EMAIL%TYPE,
247
							 sDomain IN USERS.DOMAIN%TYPE   );
248
 
249
PROCEDURE Add_Application_User ( sUserIdList IN VARCHAR2,
250
		  					   	 nAppId IN USER_APPLICATIONS.APP_ID%TYPE,
251
								 cIncludeEveryone IN CHAR );
252
 
253
PROCEDURE Remove_Application_User ( sUserIdList IN VARCHAR2,
254
		  					   	  	nAppId IN USER_APPLICATIONS.APP_ID%TYPE,
255
									cIncludeEveryone IN CHAR DEFAULT NULL );	
256
 
257
PROCEDURE Add_Role_Member ( sUserIdList IN VARCHAR2,
258
		  					nRoleId IN USER_ROLES.ROLE_ID%TYPE,
259
							cIncludeEveryone IN CHAR );
260
 
261
PROCEDURE Remove_Role_Member ( sUserIdList IN VARCHAR2,
262
		  					   nRoleId IN USER_ROLES.ROLE_ID%TYPE,
263
							   cIncludeEveryone IN CHAR DEFAULT NULL);									
264
 
265
PROCEDURE Disable_Users ( sUserIdList IN VARCHAR2,
266
 					   	  nAppId IN USER_APPLICATIONS.APP_ID%TYPE );	
267
 
268
PROCEDURE Remove_User_Account ( sUserIdList IN VARCHAR2 );
269
 
270
END pk_user;
271
 
272
/
273
 
274
/
275
--------------------------------------------------------
276
--  DDL for Package Body PK_AMUTILS
277
--------------------------------------------------------
278
 
279
  CREATE OR REPLACE PACKAGE BODY "PK_AMUTILS" 
280
IS
281
/* ---------------------------------------------------------------------------
282
    Version: 1.0.0
283
   --------------------------------------------------------------------------- */
284
 
285
/*--------------------------------------------------------------------------------------------------*/
286
PROCEDURE Log_Access ( nEvent IN LOGIN_TRAIL.ENUM_EVENT%TYPE,
287
		  			   sUserName IN LOGIN_TRAIL.USER_NAME%TYPE,
288
					   sClientIp IN LOGIN_TRAIL.CLIENT_IP%TYPE,
289
					   nAppId IN LOGIN_TRAIL.APP_ID%TYPE,
290
					   sComments IN LOGIN_TRAIL.COMMENTS%TYPE,
291
					   nUserId IN NUMBER DEFAULT NULL ) IS
292
 
293
UserName USERS.USER_NAME%TYPE; 						 
294
 
295
BEGIN
296
	/*--------------- Business Rules Here -------------------*/
297
	IF nUserId IS NOT NULL THEN
298
	   SELECT USER_NAME  INTO  UserName  FROM USERS  WHERE USER_ID = nUserId;
299
	ELSE
300
	   UserName := sUserName;
301
	END IF;
302
	/*-------------------------------------------------------*/
303
 
304
 
305
	-- Insert Login Trail
306
	INSERT INTO LOGIN_TRAIL ( ENUM_EVENT, USER_NAME, CLIENT_IP, APP_ID, STAMP, COMMENTS ) 
307
	VALUES ( nEvent,
308
		   	 UserName,
309
			 sClientIp, 
310
			 nAppId,
311
			 TO_DATE( TO_CHAR( SYSDATE,'DD-MON-YYYY HH24:MI:SS' ),'DD-MON-YYYY HH24:MI:SS' ),
312
			 sComments
313
	   	    );
314
 
315
END	Log_Access;
316
/*--------------------------------------------------------------------------------------------------*/
317
FUNCTION Get_Hash ( sText IN VARCHAR2 ) RETURN VARCHAR2 IS
318
 
319
 
320
BEGIN
321
	/*--------------- Business Rules Here -------------------*/
322
	/*-------------------------------------------------------*/
323
 
324
	RETURN DBMS_OBFUSCATION_TOOLKIT.MD5( input_string => sText );
325
 
326
END	Get_Hash;
327
/*--------------------------------------------------------------------------------------------------*/
328
 
329
 
330
END pk_AMUtils;
331
 
332
/
333
 
334
/
335
--------------------------------------------------------
336
--  DDL for Package Body PK_APPLICATION
337
--------------------------------------------------------
338
 
339
  CREATE OR REPLACE PACKAGE BODY "PK_APPLICATION" 
340
IS
341
/* ---------------------------------------------------------------------------
342
    Version: 1.0.0
343
   --------------------------------------------------------------------------- */
344
 
345
/*--------------------------------------------------------------------------------------------------*/
346
PROCEDURE Add_Application ( sAppName IN APPLICATIONS.APPLICATION_NAME%TYPE,
347
		  				  	sAppAcronym IN APPLICATIONS.ACRONYM%TYPE ) IS
348
 
349
AppId NUMBER;
350
 
351
CURSOR curAppAcronym IS 
352
		SELECT app.ACRONYM
353
		  FROM APPLICATIONS app
354
		 WHERE app.ACRONYM = sAppAcronym;
355
recAppAcronym curAppAcronym%ROWTYPE;
356
 
357
 
358
BEGIN
359
	/*--------------- Business Rules Here -------------------*/
360
 
361
	-- Check for duplicate acronyms
362
	OPEN curAppAcronym;
363
	FETCH curAppAcronym INTO recAppAcronym;
364
 
365
	IF curAppAcronym%FOUND
366
	THEN
367
		RAISE_APPLICATION_ERROR (-20000, 'Application Acronym <b>'|| sAppAcronym ||'</b> is already used.' );
368
 
369
	END IF;
370
 
371
	CLOSE curAppAcronym;
372
 
373
	/*-------------------------------------------------------*/
374
 
375
	/*+++++ INSERT APPLICATION ++++++++*/
376
	BEGIN
377
		-- Get app_id
378
		SELECT SEQ_APP_ID.NEXTVAL INTO AppId FROM DUAL;
379
 
380
		-- Insert new Application
381
		INSERT INTO APPLICATIONS ( APP_ID, APPLICATION_NAME, ACRONYM ) 
382
		VALUES ( AppId, sAppName, sAppAcronym );
383
 
384
 
385
	EXCEPTION
386
    WHEN DUP_VAL_ON_INDEX
387
	THEN		
388
		RAISE_APPLICATION_ERROR (-20000, 'Application Name <b>'|| sAppName ||'</b> is already used.');
389
	END;
390
	/*+++++ END INSERT APPLICATION +++++*/
391
 
392
 
393
END	Add_Application;
394
/*--------------------------------------------------------------------------------------------------*/
395
PROCEDURE Remove_Application ( nAppId IN APPLICATIONS.APP_ID%TYPE ) IS
396
 
397
rowCount NUMBER DEFAULT 0;
398
 
399
BEGIN
400
	/*--------------- Business Rules Here -------------------*/
401
 
402
	-- Check if any Users are using this Application
403
	SELECT Count(*) INTO rowCount
404
	  FROM USER_APPLICATIONS ua
405
	 WHERE ua.APP_ID = nAppId;
406
 
407
	IF rowCount > 0 THEN
408
	   RAISE_APPLICATION_ERROR (-20000, 'Some Users are still assigned to this Application ( Counted '|| rowCount ||' ).' );
409
	END IF; 
410
 
411
	-- Check if any Roles are using this Application
412
	SELECT Count(*) INTO rowCount
413
  	  FROM ROLES ro 
414
	 WHERE ro.APP_ID = nAppId;
415
 
416
	IF rowCount > 0 THEN
417
	   RAISE_APPLICATION_ERROR (-20000, 'Some Roles are still assigned to this Application ( Counted '|| rowCount ||' ).' );
418
	END IF;
419
 
420
	/*-------------------------------------------------------*/
421
 
422
 
423
	-- Remove Application --
424
	DELETE 
425
	  FROM APPLICATIONS
426
	 WHERE APP_ID = nAppId;
427
 
428
 
429
END	Remove_Application;
430
/*--------------------------------------------------------------------------------------------------*/
431
 
432
 
433
END pk_Application;
434
 
435
/
436
 
437
/
438
--------------------------------------------------------
439
--  DDL for Package Body PK_CONTROL
440
--------------------------------------------------------
441
 
442
  CREATE OR REPLACE PACKAGE BODY "PK_CONTROL" 
443
IS
444
/* ---------------------------------------------------------------------------
445
    Version: 1.0.0
446
   --------------------------------------------------------------------------- */
447
 
448
/*--------------------------------------------------------------------------------------------------*/
449
PROCEDURE Add_Control ( sObjName IN CONTROL_OBJECTS.OBJ_NAME%TYPE,
450
		  		   	  	sObjDescription IN CONTROL_OBJECTS.OBJ_DESCRIPTION%TYPE,
451
					 	nAppId IN CONTROL_OBJECTS.APP_ID%TYPE
452
		  		   	 	) IS
453
 
454
ObjID NUMBER;
455
 
456
CURSOR curPermissionTypes IS 
457
		SELECT pt.PERM_ID
458
  		  FROM PERMISSION_TYPES pt;
459
recPermissionTypes curPermissionTypes%ROWTYPE;
460
 
461
 
462
BEGIN
463
	/*--------------- Business Rules Here -------------------*/
464
	/*-------------------------------------------------------*/
465
 
466
	-- Get obj_id
467
	SELECT SEQ_OBJ_ID.NEXTVAL INTO ObjID FROM DUAL;
468
 
469
	-- Insert new Control Object
470
	INSERT INTO CONTROL_OBJECTS ( OBJ_ID, APP_ID, OBJ_NAME, PARENT_OBJ_ID, OBJ_DESCRIPTION ) 
471
	VALUES ( ObjID, nAppId, sObjName, NULL, sObjDescription );
472
 
473
 
474
 
475
 
476
	/* Set default permissions to all roles */
477
 
478
	/*
479
	OPEN curPermissionTypes;
480
	FETCH curPermissionTypes INTO recPermissionTypes;
481
 
482
	WHILE curPermissionTypes%FOUND
483
	LOOP
484
		INSERT INTO ROLE_PRIVILEGES ( ROLE_ID, OBJ_ID, PERM_ID, PERM_VALUE )
485
		SELECT ROLE_ID, 
486
			   ObjID AS OBJ_ID, 
487
			   recPermissionTypes.PERM_ID AS PERM_ID, 
488
			   'Y' AS PERM_VALUE
489
		  FROM ROLES
490
		 WHERE IS_ROLE_VARIATION != 'Y';
491
 
492
 
493
		FETCH curPermissionTypes INTO recPermissionTypes;
494
	END LOOP;
495
	CLOSE curPermissionTypes;
496
	*/
497
 
498
	EXCEPTION
499
    WHEN DUP_VAL_ON_INDEX
500
	THEN		
501
		RAISE_APPLICATION_ERROR (-20000, 'Control Name '|| sObjName ||' is already used in this Application.');
502
 
503
 
504
END	Add_Control;
505
/*--------------------------------------------------------------------------------------------------*/
506
PROCEDURE Remove_Control ( sObjIdList IN VARCHAR2 ) IS
507
 
508
rowCount NUMBER DEFAULT 0;
509
 
510
BEGIN
511
	/*--------------- Business Rules Here -------------------*/
512
 
513
	-- Check if any Pages use this control
514
	SELECT Count(*) INTO rowCount
515
	  FROM PAGE_CONTROL_OBJECTS pco
516
	 WHERE pco.OBJ_ID IN  (
517
						   SELECT *
518
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sObjIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
519
	   	   			   	   );
520
 
521
	IF rowCount > 0 THEN
522
	   RAISE_APPLICATION_ERROR (-20000, 'Some Pages are still using this Control ( Counted '|| rowCount ||' ).' );
523
	END IF; 
524
 
525
 
526
	-- Check if any Roles use this control
527
	SELECT Count(*) INTO rowCount
528
  	  FROM ROLE_PRIVILEGES rp 
529
	 WHERE rp.OBJ_ID IN (
530
						   SELECT *
531
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sObjIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
532
	   	   			   	   );
533
 
534
	IF rowCount > 0 THEN
535
	   RAISE_APPLICATION_ERROR (-20000, 'Some Roles are still using this Control ( Counted '|| rowCount ||' ).' );
536
	END IF;
537
 
538
 
539
	-- Check if any Data tables use this control
540
	SELECT Count(*) INTO rowCount
541
	  FROM DATA_TABLES dt,
542
	  	   DATA_PERMISSIONS dp 
543
	 WHERE dt.OBJ_ID IN   (
544
						   SELECT *
545
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sObjIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
546
	   	   			   	   )
547
	   AND dt.DT_ID = dp.DT_ID;
548
 
549
	IF rowCount > 0 THEN
550
	   RAISE_APPLICATION_ERROR (-20000, 'Some Data Filters are still in use by Roles ( Counted '|| rowCount ||' ).' );
551
	END IF;
552
 
553
	/*-------------------------------------------------------*/
554
 
555
 
556
	-- Remove Data Filter --
557
	DELETE 
558
	  FROM DATA_TABLES dt
559
	 WHERE dt.OBJ_ID IN   (
560
						   SELECT *
561
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sObjIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
562
	   	   			   	   );
563
 
564
	-- Remove Control -- 
565
	DELETE 
566
	  FROM CONTROL_OBJECTS co
567
	 WHERE co.OBJ_ID IN   (
568
						   SELECT *
569
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sObjIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
570
	   	   			   	   );
571
 
572
 
573
END	Remove_Control;
574
/*--------------------------------------------------------------------------------------------------*/
575
PROCEDURE Add_DataTable ( nObjId IN DATA_TABLES.OBJ_ID%TYPE,
576
						  sTableName IN DATA_TABLES.TABLE_NAME%TYPE,
577
						  sRefColumn IN DATA_TABLES.REF_COLUMN_NAME%TYPE,
578
						  sDisplayColumn IN DATA_TABLES.DISPLAY_COLUMN_NAME%TYPE
579
		  		   	 	) IS
580
 
581
DtID NUMBER;
582
 
583
 
584
BEGIN
585
	/*--------------- Business Rules Here -------------------*/
586
	/*-------------------------------------------------------*/
587
 
588
	-- Get dt_id
589
	SELECT SEQ_DT_ID.NEXTVAL INTO DtID FROM DUAL;
590
 
591
	-- Insert new Control Object
592
	INSERT INTO DATA_TABLES ( DT_ID, OBJ_ID, TABLE_NAME, REF_COLUMN_NAME, DISPLAY_COLUMN_NAME )
593
	VALUES ( DtID, nObjId, sTableName, sRefColumn, sDisplayColumn );
594
 
595
 
596
	EXCEPTION
597
    WHEN DUP_VAL_ON_INDEX
598
	THEN		
599
		RAISE_APPLICATION_ERROR (-20000, 'This Data Table Reference is already used in this Action object.');
600
 
601
 
602
END	Add_DataTable;
603
/*--------------------------------------------------------------------------------------------------*/
604
PROCEDURE Remove_DataTable ( DtId IN NUMBER ) IS
605
 
606
 
607
BEGIN
608
	/*--------------- Business Rules Here -------------------*/
609
 
610
	/*-------------------------------------------------------*/
611
 
612
 
613
	-- Remove Data Permissions --
614
	DELETE 
615
	  FROM DATA_PERMISSIONS dp
616
	 WHERE dp.DT_ID = DtId;
617
 
618
	-- Remove Data Table -- 
619
	DELETE 
620
	  FROM DATA_TABLES dt
621
	 WHERE dt.DT_ID = DtId;
622
 
623
 
624
END	Remove_DataTable;
625
/*--------------------------------------------------------------------------------------------------*/
626
PROCEDURE Set_Row_Permissions ( nDtId IN DATA_PERMISSIONS.DT_ID%TYPE,
627
							  	nRoleId IN DATA_PERMISSIONS.ROLE_ID%TYPE,
628
							 	nRefCol IN DATA_PERMISSIONS.REF_COLUMN_VAL%TYPE,
629
						     	cIsVisible IN DATA_PERMISSIONS.PERM_VALUE%TYPE DEFAULT NULL,
630
						     	cIsActive IN DATA_PERMISSIONS.PERM_VALUE%TYPE  DEFAULT NULL ) IS
631
 
632
nPermId PERMISSION_TYPES.PERM_ID%TYPE DEFAULT 0;
633
 
634
BEGIN
635
	/*--------------- Business Rules Here -------------------*/
636
	/*-------------------------------------------------------*/
637
 
638
	-- Delete Existing Permission --
639
	Delete_Data_Permission ( nDtId, nRoleId, nRefCol );
640
 
641
 
642
	----- Set Data Permission -----
643
 
644
	-- Get PermId for "Visible"
645
	SELECT pt.PERM_ID INTO nPermId FROM PERMISSION_TYPES pt WHERE pt.PERM_NAME = 'enumVISIBLE';
646
 
647
 
648
 
649
	IF (cIsVisible IS NOT NULL) THEN
650
 
651
	   INSERT INTO DATA_PERMISSIONS ( DT_ID, ROLE_ID, REF_COLUMN_VAL, PERM_ID, PERM_VALUE )
652
	   VALUES ( nDtId, nRoleId, nRefCol, nPermId, cIsVisible );
653
 
654
	END IF;
655
 
656
 
657
 
658
	-- Get PermId for "Active"
659
	SELECT pt.PERM_ID INTO nPermId FROM PERMISSION_TYPES pt WHERE pt.PERM_NAME = 'enumACTIVE';
660
 
661
 
662
 
663
	IF (cIsActive IS NOT NULL) THEN
664
 
665
	   INSERT INTO DATA_PERMISSIONS ( DT_ID, ROLE_ID, REF_COLUMN_VAL, PERM_ID, PERM_VALUE )
666
	   VALUES ( nDtId, nRoleId, nRefCol, nPermId, cIsActive );
667
 
668
	END IF;
669
 
670
 
671
 
672
END	Set_Row_Permissions;
673
/*--------------------------------------------------------------------------------------------------*/
674
PROCEDURE Delete_Data_Permission ( nDtId IN DATA_PERMISSIONS.DT_ID%TYPE,
675
								   nRoleId IN DATA_PERMISSIONS.ROLE_ID%TYPE,
676
								   nRefCol IN DATA_PERMISSIONS.REF_COLUMN_VAL%TYPE ) IS
677
 
678
 
679
BEGIN
680
	/*--------------- Business Rules Here -------------------*/
681
	IF (nDtId IS NULL) OR (nRoleId IS NULL) OR (nRefCol IS NULL)
682
	THEN
683
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nDtId= '|| nDtId ||', nRoleId='|| nRoleId ||', nRefCol='|| nRefCol );
684
 
685
	END IF;
686
	/*-------------------------------------------------------*/
687
 
688
	DELETE
689
	  FROM DATA_PERMISSIONS dp
690
	 WHERE dp.ROLE_ID = nRoleId
691
	   AND dp.DT_ID = nDtId
692
	   AND dp.REF_COLUMN_VAL = nRefCol;
693
 
694
 
695
END	Delete_Data_Permission;
696
/*--------------------------------------------------------------------------------------------------*/
697
 
698
 
699
END pk_Control;
700
 
701
/
702
 
703
/
704
--------------------------------------------------------
705
--  DDL for Package Body PK_ROLE
706
--------------------------------------------------------
707
 
708
  CREATE OR REPLACE PACKAGE BODY "PK_ROLE" 
709
         IS
710
 
711
         /*--------------------------------------------------------------------------------------------------*/
712
         PROCEDURE Add_Role ( sRoleName IN ROLES.ROLE_NAME%TYPE,
713
                              sRoleComments IN ROLES.COMMENTS%TYPE,
714
                              nAppId IN ROLES.APP_ID%TYPE  ) IS
715
 
716
         RoleID NUMBER;
717
 
718
         BEGIN
719
            /*--------------- Business Rules Here -------------------*/
720
            /*-------------------------------------------------------*/
721
 
722
 
723
            -- Get role_id
724
            SELECT SEQ_ROLE_ID.NEXTVAL INTO RoleID FROM DUAL;
725
 
726
            -- Insert new Role
727
            INSERT INTO ROLES ( ROLE_ID, APP_ID, ROLE_NAME, IS_ROLE_VARIATION, COMMENTS )
728
            VALUES ( RoleID, nAppId, sRoleName, NULL, sRoleComments );
729
 
730
 
731
            EXCEPTION
732
            WHEN DUP_VAL_ON_INDEX
733
            THEN
734
               RAISE_APPLICATION_ERROR (-20000, 'Role Name '|| sRoleName ||' is already used in this Application.');
735
 
736
         END   Add_Role;
737
         /*--------------------------------------------------------------------------------------------------*/
738
         PROCEDURE Remove_Role ( sRoleIdList IN VARCHAR2 ) IS
739
 
740
         rowCount NUMBER DEFAULT 0;
741
 
742
         BEGIN
743
            /*--------------- Business Rules Here -------------------*/
744
 
745
            -- Check if any Users user this role
746
            SELECT Count(*) INTO rowCount
747
            FROM USER_ROLES ur
748
            WHERE ur.ROLE_ID IN  (SELECT * FROM THE ( SELECT CAST( IN_LIST_NUMBER( sRoleIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) );
749
 
750
            IF rowCount > 0 THEN
751
               RAISE_APPLICATION_ERROR (-20000, 'Some Users are still using this Role ( Counted '|| rowCount ||' ).' );
752
            END IF;
753
 
754
            /*-------------------------------------------------------*/
755
 
756
            -- Remove Role Privileges --
757
            DELETE
758
            FROM ROLE_PRIVILEGES rp
759
            WHERE rp.ROLE_ID IN  ( SELECT * FROM THE ( SELECT CAST( IN_LIST_NUMBER( sRoleIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) );
760
 
761
            -- Remove Role Data Permissions --
762
            DELETE
763
            FROM DATA_PERMISSIONS dp
764
            WHERE dp.ROLE_ID IN  ( SELECT * FROM THE ( SELECT CAST( IN_LIST_NUMBER( sRoleIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) );
765
 
766
            -- Remove Role --
767
            DELETE
768
            FROM ROLES ro
769
            WHERE ro.ROLE_ID IN  ( SELECT * FROM THE ( SELECT CAST( IN_LIST_NUMBER( sRoleIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) );
770
 
771
 
772
         END   Remove_Role;
773
         /*--------------------------------------------------------------------------------------------------*/
774
         PROCEDURE Set_Role_Permissions ( nRoleId IN ROLE_PRIVILEGES.ROLE_ID%TYPE,
775
                                          nObjId IN ROLE_PRIVILEGES.OBJ_ID%TYPE,
776
                                          cIsVisible IN ROLE_PRIVILEGES.PERM_VALUE%TYPE DEFAULT NULL,
777
                                          cIsActive IN ROLE_PRIVILEGES.PERM_VALUE%TYPE  DEFAULT NULL ) IS
778
 
779
         nPermId PERMISSION_TYPES.PERM_ID%TYPE DEFAULT 0;
780
 
781
         BEGIN
782
            /*--------------- Business Rules Here -------------------*/
783
            IF (nRoleId IS NULL) OR (nObjId IS NULL)
784
            THEN
785
               RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRoleId= '|| nRoleId ||', nObjId='|| nObjId );
786
 
787
            END IF;
788
            /*-------------------------------------------------------*/
789
 
790
 
791
            --- Set "Visible" state ----------------------------------
792
 
793
            -- Get PermId for "Visible"
794
            SELECT pt.PERM_ID INTO nPermId FROM PERMISSION_TYPES pt WHERE pt.PERM_NAME = 'enumVISIBLE';
795
 
796
            Delete_Role_Permission ( nRoleId, nObjId, nPermId );
797
 
798
            IF cIsVisible IS NOT NULL THEN
799
 
800
               INSERT INTO ROLE_PRIVILEGES ( ROLE_ID, OBJ_ID, PERM_ID, PERM_VALUE )
801
               VALUES ( nRoleId, nObjId, nPermId, cIsVisible );
802
 
803
            ELSE
804
               IF cIsActive IS NOT NULL THEN
805
                  -- If "Active" is Set then "Visible" must be "SHOW=Y"
806
 
807
                  INSERT INTO ROLE_PRIVILEGES ( ROLE_ID, OBJ_ID, PERM_ID, PERM_VALUE )
808
                  VALUES ( nRoleId, nObjId, nPermId, 'Y' );
809
 
810
               END IF;
811
 
812
            END IF;
813
 
814
            --- Set "Active" state ----------------------------------
815
 
816
            -- Get PermId for "Visible"
817
            SELECT pt.PERM_ID INTO nPermId FROM PERMISSION_TYPES pt WHERE pt.PERM_NAME = 'enumACTIVE';
818
 
819
            Delete_Role_Permission ( nRoleId, nObjId, nPermId );
820
 
821
            IF ( cIsActive IS NOT NULL ) AND ( cIsVisible <> 'N') THEN
822
 
823
               INSERT INTO ROLE_PRIVILEGES ( ROLE_ID, OBJ_ID, PERM_ID, PERM_VALUE )
824
               VALUES ( nRoleId, nObjId, nPermId, cIsActive );
825
 
826
            END IF;
827
 
828
 
829
         END   Set_Role_Permissions;
830
         /*--------------------------------------------------------------------------------------------------*/
831
         PROCEDURE Set_Role_Variation_Permissions ( nUserId IN USER_ROLES.USER_ID%TYPE,
832
                                                   nAppId IN ROLES.APP_ID%TYPE,
833
                                                   nRoleId IN ROLES.ROLE_ID%TYPE,
834
                                                   nObjId IN ROLE_PRIVILEGES.OBJ_ID%TYPE,
835
                                                   cIsVisible IN ROLE_PRIVILEGES.PERM_VALUE%TYPE DEFAULT NULL,
836
                                                   cIsActive IN ROLE_PRIVILEGES.PERM_VALUE%TYPE  DEFAULT NULL ) IS
837
 
838
         nPermId             PERMISSION_TYPES.PERM_ID%TYPE DEFAULT 0;
839
         nRoleVariationId    ROLES.ROLE_ID%TYPE DEFAULT NULL;
840
         sUserName           USERS.USER_NAME%TYPE;
841
         nDataPermCount      NUMBER;
842
         nRolePermCount      NUMBER;
843
 
844
         --- Get Role Variation Id ---
845
         CURSOR curRoleVariation IS
846
               SELECT ro.ROLE_ID
847
               FROM USER_ROLES ur,
848
                     ROLES ro
849
               WHERE ur.ROLE_ID = ro.ROLE_ID
850
                  AND ro.IS_ROLE_VARIATION = 'Y'
851
                  AND ur.USER_ID = nUserId;
852
 
853
         recRoleVariation curRoleVariation%ROWTYPE;
854
 
855
         BEGIN
856
            /*--------------- Business Rules Here -------------------*/
857
            IF (nUserId IS NULL) OR (nAppId IS NULL) OR (nObjId IS NULL)
858
            THEN
859
               RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nUserId='|| nUserId ||', nAppId='|| nAppId ||', nObjId='|| nObjId);
860
 
861
            END IF;
862
            /*-------------------------------------------------------*/
863
 
864
            IF Is_Permissions_Changed( nRoleId, nObjId, cIsVisible, cIsActive ) THEN
865
 
866
               IF Is_Role_Variation ( nRoleId ) THEN
867
                  --- Set this user role permissions ---
868
                  Set_Role_Permissions ( nRoleId, nObjId, cIsVisible, cIsActive );
869
 
870
 
871
                  --- Remove this user role for no permission settings ---
872
                  -- Get Role Permissions Count
873
                  SELECT Count(*) INTO nRolePermCount  FROM ROLE_PRIVILEGES rp WHERE rp.ROLE_ID = nRoleVariationId;
874
 
875
                  -- Get Role Permissions Count
876
                  SELECT Count(*) INTO nDataPermCount  FROM DATA_PERMISSIONS dp WHERE dp.ROLE_ID = nRoleVariationId;
877
 
878
 
879
                  IF (nRolePermCount = 0) AND (nDataPermCount = 0) THEN
880
                     -- There are no permission settings, hence proceed to remove this user role
881
                     DELETE
882
                     FROM ROLES ro
883
                     WHERE ro.ROLE_ID = nRoleVariationId;
884
 
885
                  END IF;
886
 
887
               ELSE
888
                     --- Get Role Variation Id ---
889
                  OPEN curRoleVariation;
890
                  FETCH curRoleVariation INTO recRoleVariation;
891
 
892
                  IF curRoleVariation%FOUND THEN
893
                     nRoleVariationId := recRoleVariation.ROLE_ID;
894
                  END IF;
895
 
896
                  CLOSE curRoleVariation;
897
 
898
                  --- Create Role Variation if does not exist ---
899
                  IF nRoleVariationId IS NULL THEN
900
 
901
                     -- Get role_id
902
                     SELECT SEQ_ROLE_ID.NEXTVAL INTO nRoleVariationId FROM DUAL;
903
 
904
                     -- Get user_name
905
                     SELECT usr.USER_NAME INTO sUserName FROM USERS usr WHERE usr.USER_ID = nUserId;
906
 
907
                     -- Create Role Variation
908
                     INSERT INTO ROLES ( ROLE_ID, APP_ID, ROLE_NAME, IS_ROLE_VARIATION, COMMENTS )
909
                     VALUES ( nRoleVariationId, nAppId, UPPER( sUserName ) || '_SPECIFIC', 'Y', 'Auto-created role to define user specific permissions.');
910
 
911
                     -- Link this role to user
912
                     INSERT INTO USER_ROLES ( USER_ID, ROLE_ID )
913
                     VALUES ( nUserId, nRoleVariationId );
914
 
915
                  END IF;
916
 
917
                  --- Set this user role permissions ---
918
                  Set_Role_Permissions ( nRoleVariationId, nObjId, cIsVisible, cIsActive );
919
 
920
               END IF;
921
 
922
            END IF;
923
 
924
 
925
         END   Set_Role_Variation_Permissions;
926
         /*--------------------------------------------------------------------------------------------------*/
927
         FUNCTION Is_Permissions_Changed ( nRoleId IN ROLE_PRIVILEGES.ROLE_ID%TYPE,
928
                                          nObjId IN ROLE_PRIVILEGES.OBJ_ID%TYPE,
929
                                          cIsVisible IN ROLE_PRIVILEGES.PERM_VALUE%TYPE,
930
                                          cIsActive IN ROLE_PRIVILEGES.PERM_VALUE%TYPE ) RETURN BOOLEAN IS
931
 
932
         ReturnValue       BOOLEAN DEFAULT FALSE;
933
         cCurrentIsVisible ROLE_PRIVILEGES.PERM_VALUE%TYPE;
934
         cCurrentIsActive  ROLE_PRIVILEGES.PERM_VALUE%TYPE;
935
 
936
         CURSOR curCurrentIsVisible IS
937
               SELECT rp.PERM_VALUE
938
               FROM ROLE_PRIVILEGES rp
939
               WHERE rp.ROLE_ID = nRoleId
940
                  AND rp.OBJ_ID = nObjId
941
                  AND rp.PERM_ID = 1;
942
         recCurrentIsVisible curCurrentIsVisible%ROWTYPE;
943
 
944
         CURSOR curCurrentIsActive IS
945
               SELECT rp.PERM_VALUE
946
               FROM ROLE_PRIVILEGES rp
947
               WHERE rp.ROLE_ID = nRoleId
948
                  AND rp.OBJ_ID = nObjId
949
                  AND rp.PERM_ID = 2;
950
         recCurrentIsActive curCurrentIsActive%ROWTYPE;
951
 
952
         BEGIN
953
            /*--------------- Business Rules Here -------------------*/
954
            /*-------------------------------------------------------*/
955
 
956
 
957
            -- Get "Visible" Permission
958
            OPEN curCurrentIsVisible;
959
            FETCH curCurrentIsVisible INTO recCurrentIsVisible;
960
 
961
            IF curCurrentIsVisible%FOUND THEN
962
               cCurrentIsVisible := recCurrentIsVisible.PERM_VALUE;
963
            END IF;
964
 
965
            CLOSE curCurrentIsVisible;
966
 
967
            -- Get "Active" Permission
968
            OPEN curCurrentIsActive;
969
            FETCH curCurrentIsActive INTO recCurrentIsActive;
970
 
971
            IF curCurrentIsActive%FOUND THEN
972
               cCurrentIsActive := recCurrentIsActive.PERM_VALUE;
973
            END IF;
974
 
975
            CLOSE curCurrentIsActive;
976
 
977
            --- Compare ---
978
            IF NOT Is_Same_String( cCurrentIsVisible, cIsVisible ) OR NOT Is_Same_String( cCurrentIsActive, cIsActive )  THEN
979
               ReturnValue := TRUE;
980
 
981
            END IF;
982
 
983
            RETURN ReturnValue;
984
         END   Is_Permissions_Changed;
985
         /*--------------------------------------------------------------------------------------------------*/
986
         FUNCTION Is_Role_Variation ( nRoleId IN ROLES.ROLE_ID%TYPE ) RETURN BOOLEAN IS
987
 
988
         ReturnValue     BOOLEAN DEFAULT FALSE;
989
         cIsRoleVariation CHAR;
990
 
991
         BEGIN
992
            /*--------------- Business Rules Here -------------------*/
993
            /*-------------------------------------------------------*/
994
 
995
            -- Get is_role_variation
996
            SELECT ro.IS_ROLE_VARIATION INTO cIsRoleVariation
997
            FROM ROLES ro
998
            WHERE ro.ROLE_ID = nRoleId;
999
 
1000
            IF cIsRoleVariation IS NOT NULL THEN
1001
               ReturnValue := TRUE;
1002
            END IF;
1003
 
1004
            RETURN ReturnValue;
1005
         END   Is_Role_Variation;
1006
         /*--------------------------------------------------------------------------------------------------*/
1007
         PROCEDURE Delete_Role_Permission ( nRoleId IN ROLE_PRIVILEGES.ROLE_ID%TYPE,
1008
                                          nObjId IN ROLE_PRIVILEGES.OBJ_ID%TYPE,
1009
                                          nPermId IN ROLE_PRIVILEGES.PERM_ID%TYPE ) IS
1010
 
1011
 
1012
         BEGIN
1013
            /*--------------- Business Rules Here -------------------*/
1014
            IF (nRoleId IS NULL) OR (nObjId IS NULL) OR (nPermId IS NULL)
1015
            THEN
1016
               RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRoleId= '|| nRoleId ||', nObjId='|| nObjId ||', nPermId='|| nPermId );
1017
 
1018
            END IF;
1019
            /*-------------------------------------------------------*/
1020
 
1021
            DELETE
1022
            FROM ROLE_PRIVILEGES rp
1023
            WHERE rp.ROLE_ID = nRoleId
1024
               AND rp.OBJ_ID = nObjId
1025
               AND rp.PERM_ID = nPermId;
1026
 
1027
 
1028
         END   Delete_Role_Permission;
1029
         /*--------------------------------------------------------------------------------------------------*/
1030
         PROCEDURE Grant_Role ( sRoleIdList IN VARCHAR2,
1031
                              nUserId IN USER_ROLES.USER_ID%TYPE ) IS
1032
 
1033
 
1034
         BEGIN
1035
            /*--------------- Business Rules Here -------------------*/
1036
            IF sRoleIdList IS NULL THEN
1037
               RAISE_APPLICATION_ERROR (-20000, 'Please select at least one role.' );
1038
            END IF;
1039
            /*-------------------------------------------------------*/
1040
 
1041
            --- Grant Role(s) ---
1042
            INSERT INTO USER_ROLES ( USER_ID, ROLE_ID )
1043
            SELECT nUserId, qry.ROLE_ID
1044
            FROM (
1045
                  SELECT ro.ROLE_ID
1046
                     FROM ROLES ro
1047
                     WHERE ro.ROLE_ID IN ( SELECT * FROM THE ( SELECT CAST( IN_LIST_NUMBER( sRoleIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) )
1048
                  MINUS
1049
                  SELECT ur.ROLE_ID
1050
                     FROM USER_ROLES ur
1051
                     WHERE ur.USER_ID = nUserId
1052
                  ) qry;
1053
 
1054
 
1055
         END   Grant_Role;
1056
         /*--------------------------------------------------------------------------------------------------*/
1057
         PROCEDURE Revoke_Role ( sRoleIdList IN VARCHAR2,
1058
                                 nUserId IN USER_ROLES.USER_ID%TYPE ) IS
1059
 
1060
         nidcollector  ACCMGR_NUMBER_TAB_t := ACCMGR_NUMBER_TAB_t();
1061
         roleId        NUMBER;
1062
         roleName      ROLES.ROLE_NAME%TYPE;
1063
         sUserSpec     USERS.USER_NAME%TYPE;
1064
 
1065
         BEGIN
1066
            /*--------------- Business Rules Here -------------------*/
1067
            IF sRoleIdList IS NULL THEN
1068
               RAISE_APPLICATION_ERROR (-20000, 'Please select at least one role.' );
1069
            END IF;
1070
            /*-------------------------------------------------------*/
1071
 
1072
            --- Revoke Role(s) ---
1073
            DELETE FROM USER_ROLES ur
1074
            WHERE ur.USER_ID = nUserId
1075
               AND ur.ROLE_ID IN (SELECT * FROM THE ( SELECT CAST( IN_LIST_NUMBER( sRoleIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) );
1076
 
1077
            -- Get user_name
1078
            SELECT usr.USER_NAME INTO sUserSpec FROM USERS usr WHERE usr.USER_ID = nUserId;
1079
            sUserSpec := UPPER( sUserSpec ) || '_SPECIFIC';
1080
 
1081
            nidcollector := IN_LIST_NUMBER (sRoleIdList);
1082
 
1083
            FOR i IN 1 .. nidcollector.COUNT
1084
            LOOP
1085
               roleId := nidcollector (i);
1086
 
1087
               -- Get the role name
1088
               select role_name into roleName from roles where role_id = roleId;
1089
 
1090
               -- See if the role name contains the users name
1091
               IF (IS_SAME_STRING(roleName, sUserSpec) = TRUE) THEN
1092
                  -- This is this users specific role and so we should remove it to ensure
1093
                  -- database is kept in a good clean state for the next time a specific
1094
                  -- role for this user is required
1095
 
1096
                  DELETE FROM ROLE_PRIVILEGES rp WHERE rp.ROLE_ID = roleId;
1097
 
1098
                  DELETE FROM DATA_PERMISSIONS dp WHERE dp.ROLE_ID = roleId;
1099
 
1100
                  DELETE FROM ROLES ro WHERE ro.ROLE_ID = roleId;
1101
                  EXIT WHEN TRUE;
1102
               END IF;
1103
 
1104
            END LOOP;
1105
         END   Revoke_Role;
1106
         /*--------------------------------------------------------------------------------------------------*/
1107
         END pk_Role;
1108
 
1109
/
1110
 
1111
/
1112
--------------------------------------------------------
1113
--  DDL for Package Body PK_SECURITY
1114
--------------------------------------------------------
1115
 
1116
  CREATE OR REPLACE PACKAGE BODY "PK_SECURITY" IS     
1117
 
1118
/*
1119
------------------------------
1120
||  Last Modified:  S.Vukovic
1121
||  Modified Date:  28/Apr/2005  
1122
||  Body Version:   1.0
1123
------------------------------
1124
*/
1125
 
1126
/*-------------------------------------------------------------------------------------------------------*/
1127
FUNCTION IS_LOCAL_PASSWORD_CORRECT ( UserName IN VARCHAR2, UserPassword IN VARCHAR2 ) RETURN NUMBER IS
1128
	encryptedUserPassword VARCHAR2(4000);
1129
BEGIN
1130
	SELECT usr.USER_PASSWORD INTO encryptedUserPassword
1131
	  FROM USERS usr
1132
	 WHERE usr.USER_NAME = UserName;
1133
 
1134
	IF encryptedUserPassword = PK_AMUTILS.GET_HASH( UserPassword ) THEN
1135
		-- Password Correct
1136
		RETURN 1;
1137
	ELSE
1138
		-- Password Incorrect
1139
		RETURN -1; 
1140
	END IF;	 
1141
END;
1142
/*--------------------------------------------------------------------------------------------------*/
1143
FUNCTION Set_Password ( sUserName IN VARCHAR2, sPasswordA IN VARCHAR2, sPasswordB IN VARCHAR2 ) RETURN NUMBER IS
1144
 
1145
 
1146
BEGIN
1147
	-- Used to set password for the first time. 
1148
	-- It can only be set if previous password in null
1149
 
1150
	/*--------------- Business Rules Here -------------------*/
1151
	/*-------------------------------------------------------*/
1152
 
1153
	IF sPasswordA = sPasswordB THEN
1154
		-- Update passwords
1155
		UPDATE USERS usr SET
1156
		  usr.USER_PASSWORD = PK_AMUTILS.Get_Hash ( sPasswordA )
1157
		WHERE usr.USER_NAME = sUserName
1158
		  AND usr.USER_PASSWORD IS NULL;
1159
 
1160
		-- Successfull update
1161
		RETURN 1;	  
1162
 
1163
	ELSE
1164
		-- Password mistmatch
1165
		RETURN -1;	
1166
	END IF;
1167
 
1168
 
1169
END;
1170
/*-------------------------------------------------------------------------------------------------------*/
1171
PROCEDURE GET_USER_STATIC_PERMISSIONS ( UsedId IN NUMBER, AppId IN NUMBER, RecordSet OUT typeCur) IS
1172
 
1173
BEGIN
1174
 
1175
	OPEN RecordSet FOR
1176
	SELECT co.obj_name, perm.perm_id, perm.perm_value
1177
	  FROM (
1178
 
1179
	  	    (
1180
	  	    /* All 'Y' User Permissions */	  
1181
 
1182
			/* Get all 'Y' permissions */
1183
			SELECT DISTINCT rp.OBJ_ID, rp.PERM_ID, rp.PERM_VALUE
1184
			  FROM USER_ROLES ur,
1185
			  	   ROLE_PRIVILEGES rp,
1186
				   ROLES ro
1187
	         WHERE ur.ROLE_ID = ro.ROLE_ID
1188
			   AND rp.ROLE_ID = ro.ROLE_ID
1189
			   AND ur.USER_ID = UsedId
1190
			   AND rp.PERM_VALUE = 'Y'	
1191
			   --AND ro.APP_ID = AppId   
1192
			MINUS
1193
			/* Revoke permissions if they set to 'N'*/
1194
			SELECT DISTINCT rp.OBJ_ID, rp.PERM_ID, 'Y' AS PERM_VALUE
1195
			  FROM USER_ROLES ur,
1196
			  	   ROLE_PRIVILEGES rp,
1197
				   ROLES ro
1198
	         WHERE ur.ROLE_ID = ro.ROLE_ID
1199
			   AND rp.ROLE_ID = ro.ROLE_ID
1200
			   AND ur.USER_ID = UsedId
1201
			   AND rp.PERM_VALUE = 'N'	
1202
			  -- AND ro.APP_ID = AppId
1203
 
1204
			)
1205
 
1206
			MINUS    
1207
 
1208
			/* Role Variant Revokes */   
1209
			SELECT DISTINCT rp.OBJ_ID, rp.perm_id, 'Y' AS perm_value
1210
			  FROM role_privileges rp,
1211
			       ROLES ro,
1212
			       user_roles ur
1213
			 WHERE ro.role_id = rp.role_id
1214
			   AND ro.role_id = ur.role_id
1215
			   AND rp.PERM_VALUE = 'N'
1216
			   AND ro.IS_ROLE_VARIATION = 'Y'
1217
			   AND ur.user_id = UsedId
1218
			  -- AND ro.APP_ID = AppId 
1219
 
1220
	  	   ) perm,
1221
	       control_objects co
1222
	 WHERE perm.obj_id = co.obj_id;
1223
	  -- AND co.APP_ID = AppId;
1224
 
1225
 
1226
END;
1227
/*-------------------------------------------------------------------------------------------------------*/
1228
PROCEDURE GET_USER_DATA_PERMISSIONS ( UsedId IN NUMBER, AppId IN NUMBER, RecordSet OUT typeCur) IS
1229
 
1230
BEGIN
1231
 
1232
	OPEN RecordSet FOR
1233
	SELECT qry.TABLE_NAME,
1234
	 	   qry.REF_COLUMN_VAL,
1235
	 	   qry.PERM_ID,
1236
	 	   qry.PERM_VALUE
1237
	  FROM CONTROL_OBJECTS co,
1238
		   DATA_TABLES dt,
1239
			(
1240
 
1241
			/* Access Control Data Permissions */	
1242
			 SELECT bl.DT_ID,
1243
			 		bl.TABLE_NAME,
1244
			 		bl.REF_COLUMN_VAL,
1245
			 		bl.PERM_ID,
1246
			 		DECODE ( yc.PERM_VALUE,
1247
			 	 		   	 NULL, bl.PERM_VALUE,
1248
			 			 	 yc.PERM_VALUE ) AS PERM_VALUE
1249
			  FROM (
1250
			       	/* Get base list for Data Permissions */   
1251
				 	SELECT rol.ROLE_ID, dt.DT_ID, dt.TABLE_NAME, 0 AS REF_COLUMN_VAL, pt.PERM_ID, 'Y' AS PERM_VALUE 
1252
				 	  FROM CONTROL_OBJECTS co,
1253
				 	  	   DATA_TABLES dt,
1254
				 		   PERMISSION_TYPES pt,
1255
				 		   (
1256
				 		    /* Get User Roles for this Application */
1257
				 		    SELECT ro.*
1258
				 			  FROM ROLES ro,
1259
				 			  	   USER_ROLES ur
1260
				 			 WHERE ur.ROLE_ID = ro.ROLE_ID
1261
				 			   --AND ro.APP_ID = AppId
1262
				 			   AND ur.USER_ID = UsedId
1263
				 		   ) rol
1264
				 	 WHERE dt.OBJ_ID = co.OBJ_ID
1265
				 	   --AND co.APP_ID = AppId
1266
			  	   ) bl,
1267
			       (
1268
			 		 /* Find only 'Y' Permissions, which will change 'All' permission to 'N' */
1269
			 		 SELECT dt.DT_ID, 0 AS REF_COLUMN_VAL, dp.PERM_ID, 'N' AS PERM_VALUE, COUNT(*) AS YES_COUNT 
1270
			 		  FROM DATA_PERMISSIONS dp,
1271
			 		  	   DATA_TABLES dt,
1272
			 			   ROLES ro,
1273
			 			   USER_ROLES ur
1274
			 		 WHERE ur.ROLE_ID = ro.ROLE_ID
1275
			 		   AND dp.ROLE_ID = ro.ROLE_ID
1276
			 		   AND dp.DT_ID = dt.DT_ID	 
1277
			 		  -- AND ro.APP_ID = AppId 
1278
			 		   AND ur.USER_ID = UsedId 
1279
			 		   AND ro.IS_ROLE_VARIATION IS NULL
1280
			 		 GROUP BY dt.DT_ID, dp.PERM_ID
1281
			 		) yc 
1282
			  WHERE yc.DT_ID (+) = bl.DT_ID
1283
			    AND yc.PERM_ID (+) = bl.PERM_ID
1284
			UNION
1285
			(
1286
			/* Get Filter Settings for All Permission Types */ 
1287
			SELECT dt.DT_ID, dt.TABLE_NAME, dp.REF_COLUMN_VAL, dp.PERM_ID, dp.PERM_VALUE 
1288
			  FROM DATA_PERMISSIONS dp,
1289
			  	   DATA_TABLES dt,
1290
				   ROLES ro,
1291
				   USER_ROLES ur
1292
			 WHERE ur.ROLE_ID = ro.ROLE_ID
1293
			   AND dp.ROLE_ID = ro.ROLE_ID
1294
			   AND dp.DT_ID = dt.DT_ID	 
1295
			  -- AND ro.APP_ID = AppId 
1296
			   AND ur.USER_ID = UsedId
1297
			MINUS  
1298
			/* Overwrite Data Permissions using User Specific Role */
1299
			SELECT DISTINCT
1300
				   dt.DT_ID, 
1301
				   dt.TABLE_NAME,
1302
				   dp.REF_COLUMN_VAL,
1303
				   dp.PERM_ID,
1304
				   DECODE ( dp.PERM_VALUE,
1305
				   		  	'Y', 'N', 'Y' ) AS PERM_VALUE
1306
			  FROM DATA_PERMISSIONS dp,
1307
			  	   DATA_TABLES dt,
1308
				   ROLES ro,
1309
				   USER_ROLES ur
1310
			 WHERE ur.ROLE_ID = ro.ROLE_ID
1311
			   AND dp.ROLE_ID = ro.ROLE_ID
1312
			   AND dp.DT_ID = dt.DT_ID	 
1313
			 --  AND ro.APP_ID = AppId 
1314
			   AND ur.USER_ID = UsedId 
1315
			   AND ro.IS_ROLE_VARIATION = 'Y'   
1316
			)
1317
 
1318
			) qry
1319
	  WHERE dt.OBJ_ID = co.OBJ_ID
1320
		AND dt.DT_ID = qry.DT_ID;
1321
		--AND co.APP_ID = AppId;
1322
 
1323
 
1324
END;
1325
/*-------------------------------------------------------------------------------------------------------*/
1326
END PK_SECURITY;
1327
 
1328
/
1329
 
1330
/
1331
--------------------------------------------------------
1332
--  DDL for Package Body PK_USER
1333
--------------------------------------------------------
1334
 
1335
  CREATE OR REPLACE PACKAGE BODY "PK_USER" IS
1336
/*
1337
------------------------------
1338
||  Last Modified:  J.Tweddle
1339
||  Modified Date:  21/Jan/2008  
1340
||  Body Version:   2.1
1341
------------------------------
1342
*/
1343
 
1344
/*--------------------------------------------------------------------------------------------------*/
1345
PROCEDURE Add_User_Account ( sFullName IN USERS.FULL_NAME%TYPE,
1346
		  		   	 	   	 sUserName IN USERS.USER_NAME%TYPE,
1347
							 sUserEmail IN USERS.USER_EMAIL%TYPE,
1348
							 sDomain IN USERS.DOMAIN%TYPE   ) IS
1349
 
1350
UserId NUMBER;
1351
 
1352
 
1353
BEGIN
1354
	/*--------------- Business Rules Here -------------------*/
1355
	/*-------------------------------------------------------*/
1356
 
1357
 
1358
	-- Get user_id
1359
	SELECT SEQ_USER_ID.NEXTVAL INTO UserId FROM DUAL;
1360
 
1361
	-- Insert new User Account
1362
	INSERT INTO USERS (USER_ID, FULL_NAME, USER_NAME, USER_EMAIL, DOMAIN )
1363
	VALUES( UserId, sFullName, sUserName, sUserEmail, sDomain );
1364
 
1365
 
1366
	EXCEPTION
1367
        WHEN DUP_VAL_ON_INDEX
1368
	THEN		
1369
		RAISE_APPLICATION_ERROR (-20000, 'User Name '|| sUserName ||' already exists.');
1370
 
1371
END     Add_User_Account;
1372
 
1373
/*--------------------------------------------------------------------------------------------------*/
1374
PROCEDURE Update_User_Account ( sUserId IN VARCHAR2, sFullName IN USERS.FULL_NAME%TYPE,
1375
		  		   	 	   	 sUserName IN USERS.USER_NAME%TYPE,
1376
							 sUserEmail IN USERS.USER_EMAIL%TYPE,
1377
							 sDomain IN USERS.DOMAIN%TYPE   ) IS
1378
 
1379
BEGIN
1380
	/*--------------- Business Rules Here -------------------*/
1381
	IF (sUserId IS NULL) THEN
1382
	   RAISE_APPLICATION_ERROR (-20000, 'Please select a User Account.' );
1383
	END IF;
1384
	/*-------------------------------------------------------*/
1385
 
1386
        -- Update User Account
1387
	UPDATE USERS usr SET
1388
	usr.FULL_NAME = sFullName, usr.USER_NAME = sUserName, usr.USER_EMAIL = sUserEmail, usr.DOMAIN = sDomain
1389
	WHERE usr.USER_ID = sUserId;
1390
 
1391
END     Update_User_Account;
1392
 
1393
/*--------------------------------------------------------------------------------------------------*/
1394
PROCEDURE Add_Application_User ( sUserIdList IN VARCHAR2,
1395
		  					   	 nAppId IN USER_APPLICATIONS.APP_ID%TYPE,
1396
								 cIncludeEveryone IN CHAR ) IS
1397
 
1398
 
1399
BEGIN
1400
	/*--------------- Business Rules Here -------------------*/
1401
	IF (sUserIdList IS NULL) AND (cIncludeEveryone IS NULL) THEN
1402
	   RAISE_APPLICATION_ERROR (-20000, 'Please select at least one User.' );
1403
	END IF;
1404
	/*-------------------------------------------------------*/
1405
 
1406
	-- Insert Application User --
1407
 
1408
	IF cIncludeEveryone = 'Y' THEN
1409
	    -- Insert All Users
1410
		INSERT INTO USER_APPLICATIONS ( USER_ID, APP_ID )
1411
		SELECT qry.USER_ID, nAppId
1412
		  FROM (
1413
				SELECT usr.USER_ID
1414
				  FROM USERS usr 
1415
				MINUS
1416
				SELECT ua.USER_ID
1417
				  FROM USER_APPLICATIONS ua
1418
				 WHERE ua.APP_ID = nAppId
1419
		  	   ) qry;
1420
 
1421
	ELSE
1422
		-- Insert specific user list
1423
		INSERT INTO USER_APPLICATIONS ( USER_ID, APP_ID )
1424
		SELECT qry.USER_ID, nAppId
1425
		  FROM (
1426
		  	   	SELECT usr.USER_ID
1427
				  FROM USERS usr
1428
				 WHERE usr.USER_ID IN (
1429
				 	   			  	  SELECT *
1430
								   	    FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
1431
				   	   			   	  )
1432
		  	    MINUS
1433
				SELECT ua.USER_ID
1434
				  FROM USER_APPLICATIONS ua
1435
				 WHERE ua.APP_ID = nAppId
1436
				   AND ua.USER_ID IN (
1437
				 	   			  	  SELECT *
1438
								   	    FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
1439
				   	   			   	  )
1440
		  	   ) qry;
1441
 
1442
	END IF;
1443
 
1444
 
1445
	--- Make sure Build in User is not included ---
1446
	Remove_Application_User ( '0', nAppId );
1447
 
1448
 
1449
END	Add_Application_User;
1450
 
1451
/*--------------------------------------------------------------------------------------------------*/
1452
PROCEDURE Remove_Application_User ( sUserIdList IN VARCHAR2,
1453
		  					   	  	nAppId IN USER_APPLICATIONS.APP_ID%TYPE,
1454
									cIncludeEveryone IN CHAR DEFAULT NULL) IS
1455
 
1456
 
1457
BEGIN
1458
	/*--------------- Business Rules Here -------------------*/
1459
	IF (sUserIdList IS NULL) AND (cIncludeEveryone IS NULL) THEN
1460
	   RAISE_APPLICATION_ERROR (-20000, 'Please select at least one User.' );
1461
	END IF;
1462
	/*-------------------------------------------------------*/
1463
 
1464
	IF cIncludeEveryone = 'Y' THEN
1465
	   	-- Remove All Users --
1466
		DELETE
1467
		  FROM user_applications ua
1468
		 WHERE ua.app_id = nAppId;
1469
 
1470
	ELSE
1471
		-- Remove Application Users --
1472
		DELETE
1473
		  FROM user_applications ua
1474
		 WHERE ua.app_id = nAppId
1475
		   AND ua.user_id IN (
1476
                       SELECT *
1477
                         FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual )
1478
                       );
1479
                -- Remove User(s) Application Roles --
1480
                DELETE
1481
                  FROM user_roles ur
1482
                 WHERE ur.user_id IN (
1483
                       SELECT *
1484
                         FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual )
1485
                       )
1486
                   AND ur.role_id IN (
1487
                       SELECT ro.role_id
1488
                         FROM roles ro
1489
                        WHERE ro.app_id = nAppId
1490
                       );
1491
	END IF;
1492
 
1493
 
1494
END	Remove_Application_User;
1495
 
1496
/*--------------------------------------------------------------------------------------------------*/
1497
PROCEDURE Add_Role_Member ( sUserIdList IN VARCHAR2,
1498
		  					nRoleId IN USER_ROLES.ROLE_ID%TYPE,
1499
							cIncludeEveryone IN CHAR ) IS
1500
 
1501
 
1502
BEGIN
1503
	/*--------------- Business Rules Here -------------------*/
1504
	IF (sUserIdList IS NULL) AND (cIncludeEveryone IS NULL) THEN
1505
	   RAISE_APPLICATION_ERROR (-20000, 'Please select at least one User.' );
1506
	END IF;
1507
	/*-------------------------------------------------------*/
1508
 
1509
	-- Insert Role Member --
1510
 
1511
	IF cIncludeEveryone = 'Y' THEN
1512
	    -- Insert All Users
1513
		INSERT INTO USER_ROLES ( USER_ID, ROLE_ID )
1514
		SELECT qry.USER_ID, nRoleId
1515
		  FROM (
1516
				SELECT usr.USER_ID
1517
				  FROM USERS usr 
1518
				MINUS
1519
				SELECT ur.USER_ID
1520
				  FROM USER_ROLES ur
1521
				 WHERE ur.ROLE_ID = nRoleId
1522
		  	   ) qry;
1523
 
1524
	ELSE
1525
		-- Insert specific user list
1526
		INSERT INTO USER_ROLES ( USER_ID, ROLE_ID )
1527
		SELECT qry.USER_ID, nRoleId
1528
		  FROM (
1529
		  	   	SELECT usr.USER_ID
1530
				  FROM USERS usr
1531
				 WHERE usr.USER_ID IN (
1532
				 	   			  	  SELECT *
1533
								   	    FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
1534
				   	   			   	  )
1535
		  	    MINUS
1536
				SELECT ur.USER_ID
1537
				  FROM USER_ROLES ur
1538
				 WHERE ur.ROLE_ID = nRoleId
1539
				   AND ur.USER_ID IN (
1540
				 	   			  	  SELECT *
1541
								   	    FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
1542
				   	   			   	  )
1543
		  	   ) qry;
1544
 
1545
	END IF;
1546
 
1547
 
1548
	--- Make sure Build in User is not included ---
1549
	Remove_Role_Member ( '0', nRoleId );
1550
 
1551
 
1552
END	Add_Role_Member;
1553
 
1554
/*--------------------------------------------------------------------------------------------------*/
1555
PROCEDURE Remove_Role_Member ( sUserIdList IN VARCHAR2,
1556
		  					   nRoleId IN USER_ROLES.ROLE_ID%TYPE,
1557
							   cIncludeEveryone IN CHAR DEFAULT NULL) IS
1558
 
1559
 
1560
BEGIN
1561
	/*--------------- Business Rules Here -------------------*/
1562
	IF (nRoleId IS NULL) THEN
1563
		RAISE_APPLICATION_ERROR (-20000, 'RoleId is missing.' );
1564
	END IF;
1565
 
1566
	IF (sUserIdList IS NULL) AND (cIncludeEveryone IS NULL) THEN
1567
	   RAISE_APPLICATION_ERROR (-20000, 'Please select at least one User.' );
1568
	END IF;
1569
	/*-------------------------------------------------------*/
1570
 
1571
	IF cIncludeEveryone = 'Y' THEN
1572
	   	-- Remove All Users --
1573
		DELETE
1574
		  FROM USER_ROLES ur
1575
		 WHERE ur.ROLE_ID = nRoleId;
1576
 
1577
	ELSE
1578
		-- Remove Application Users --
1579
		DELETE
1580
		  FROM USER_ROLES ur
1581
		 WHERE ur.ROLE_ID = nRoleId
1582
		   AND ur.USER_ID IN (
1583
		 	   			  	  SELECT *
1584
						   	    FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
1585
		   	   			   	  );		
1586
	END IF;
1587
 
1588
 
1589
END	Remove_Role_Member;
1590
 
1591
/*--------------------------------------------------------------------------------------------------*/
1592
PROCEDURE Disable_Users ( sUserIdList IN VARCHAR2,
1593
 					   	  nAppId IN USER_APPLICATIONS.APP_ID%TYPE ) IS
1594
 
1595
 
1596
BEGIN
1597
	/*--------------- Business Rules Here -------------------*/
1598
	IF (sUserIdList IS NULL) THEN
1599
	   RAISE_APPLICATION_ERROR (-20000, 'Please select at least one User.' );
1600
	END IF;
1601
	/*-------------------------------------------------------*/
1602
 
1603
 
1604
	-- Disable User Accounts
1605
	UPDATE USERS usr SET
1606
	usr.IS_DISABLED = 'Y'
1607
	WHERE usr.USER_ID IN (
1608
		 	   			   SELECT *
1609
						     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
1610
		   	   			  );	
1611
 
1612
END	Disable_Users;
1613
 
1614
/*--------------------------------------------------------------------------------------------------*/
1615
PROCEDURE Remove_User_Account ( sUserIdList IN VARCHAR2 ) IS
1616
 
1617
rowCount NUMBER DEFAULT 0;
1618
 
1619
BEGIN
1620
	/*--------------- Business Rules Here -------------------*/
1621
 
1622
	IF (sUserIdList IS NULL) THEN
1623
	   RAISE_APPLICATION_ERROR (-20000, 'Please select at least one User Account.' );
1624
	END IF;
1625
 
1626
 
1627
	-- Check if any Users have any roles
1628
	SELECT Count(*) INTO rowCount
1629
	  FROM USER_ROLES ur
1630
	 WHERE ur.USER_ID IN  (
1631
						   SELECT *
1632
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
1633
	   	   			   	   );
1634
 
1635
	IF rowCount > 0 THEN
1636
	   RAISE_APPLICATION_ERROR (-20000, 'Some Users still have Roles assigned. ( Counted '|| rowCount ||' ).' );
1637
	END IF; 
1638
 
1639
	/*-------------------------------------------------------*/
1640
 
1641
	-- Remove User Applications --
1642
	DELETE 
1643
	  FROM USER_APPLICATIONS ua
1644
	 WHERE ua.USER_ID IN  (
1645
						   SELECT *
1646
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
1647
	   	   			   	   );
1648
 
1649
	-- Remove User -- 
1650
	DELETE 
1651
	  FROM USERS us
1652
	 WHERE us.USER_ID IN  (
1653
						   SELECT *
1654
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
1655
	   	   			   	   );
1656
 
1657
 
1658
END	Remove_User_Account;
1659
/*--------------------------------------------------------------------------------------------------*/
1660
END pk_user;
1661
 
1662
/
1663
 
1664
/