Subversion Repositories DevTools

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
51 mhunt 1
CREATE TABLE CONTROL_OBJECTS
2
(
3
  OBJ_ID NUMBER NOT NULL,
4
  APP_ID NUMBER NOT NULL,
5
  OBJ_NAME VARCHAR2(1000 BYTE) NOT NULL,
6
  PARENT_OBJ_ID NUMBER,
7
  OBJ_DESCRIPTION VARCHAR2(1000 BYTE)
8
, CONSTRAINT PK_CONTROL_OBJECTS PRIMARY KEY
9
  (
10
    OBJ_ID
11
  )
12
  ENABLE
13
)
14
  TABLESPACE "USERS"
15
  LOGGING 
16
  PCTFREE 10
17
  PCTUSED 40
18
  INITRANS 1
19
  MAXTRANS 255
20
  STORAGE
21
  (
22
    INITIAL 128K
23
    MINEXTENTS 1
24
    MAXEXTENTS 2147483645
25
    FREELISTS 1
26
    FREELIST GROUPS 1
27
    BUFFER_POOL DEFAULT
28
  )
29
;
30
 
31
CREATE TABLE PERMISSION_TYPES
32
(
33
  PERM_ID NUMBER NOT NULL,
34
  PERM_NAME VARCHAR2(255 BYTE) NOT NULL
35
, CONSTRAINT PK_PERMISSION_TYPES PRIMARY KEY
36
  (
37
    PERM_ID
38
  )
39
  ENABLE
40
)
41
  TABLESPACE "USERS"
42
  LOGGING 
43
  PCTFREE 10
44
  PCTUSED 40
45
  INITRANS 1
46
  MAXTRANS 255
47
  STORAGE
48
  (
49
    INITIAL 128K
50
    MINEXTENTS 1
51
    MAXEXTENTS 2147483645
52
    FREELISTS 1
53
    FREELIST GROUPS 1
54
    BUFFER_POOL DEFAULT
55
  )
56
;
57
 
58
CREATE TABLE APPLICATIONS
59
(
60
  APP_ID NUMBER NOT NULL,
61
  APPLICATION_NAME VARCHAR2(1000 BYTE) NOT NULL,
62
  DB_SCHEMA VARCHAR2(1000 BYTE),
63
  TNS_NAME VARCHAR2(1000 BYTE),
64
  SCHEMA_USERNAME VARCHAR2(255 BYTE),
65
  SCHEMA_PASSWORD VARCHAR2(255 BYTE),
66
  ACRONYM VARCHAR2(3 BYTE) NOT NULL,
67
  IS_RUNNING CHAR(1 BYTE) NOT NULL
68
, CONSTRAINT PK_APPLICATIONS PRIMARY KEY
69
  (
70
    APP_ID
71
  )
72
  ENABLE
73
)
74
  TABLESPACE "USERS"
75
  LOGGING 
76
  PCTFREE 10
77
  PCTUSED 40
78
  INITRANS 1
79
  MAXTRANS 255
80
  STORAGE
81
  (
82
    INITIAL 128K
83
    MINEXTENTS 1
84
    MAXEXTENTS 2147483645
85
    FREELISTS 1
86
    FREELIST GROUPS 1
87
    BUFFER_POOL DEFAULT
88
  )
89
;
90
 
91
CREATE TABLE USERS
92
(
93
  USER_ID NUMBER NOT NULL,
94
  FULL_NAME VARCHAR2(255 BYTE) NOT NULL,
95
  USER_NAME VARCHAR2(1000 BYTE) NOT NULL,
96
  USER_PASSWORD VARCHAR2(4000 BYTE),
97
  USER_EMAIL VARCHAR2(1000 BYTE),
98
  DOMAIN VARCHAR2(1000 BYTE),
99
  IS_DISABLED CHAR(1 BYTE),
100
  IS_ONLINE CHAR(1 BYTE),
101
  ONLINE_AT VARCHAR2(50 BYTE),
102
  LAST_VISIT DATE,
103
  LAST_REQUEST NUMBER
104
, CONSTRAINT PK_USERS PRIMARY KEY
105
  (
106
    USER_ID
107
  )
108
  ENABLE
109
)
110
  TABLESPACE "USERS"
111
  LOGGING 
112
  PCTFREE 10
113
  PCTUSED 40
114
  INITRANS 1
115
  MAXTRANS 255
116
  STORAGE
117
  (
118
    INITIAL 128K
119
    MINEXTENTS 1
120
    MAXEXTENTS 2147483645
121
    FREELISTS 1
122
    FREELIST GROUPS 1
123
    BUFFER_POOL DEFAULT
124
  )
125
;
126
 
127
CREATE TABLE LOGIN_TRAIL
128
(
129
  ENUM_EVENT NUMBER NOT NULL,
130
  USER_NAME VARCHAR2(1000 BYTE) NOT NULL,
131
  CLIENT_IP VARCHAR2(255 BYTE),
132
  APP_ID NUMBER,
133
  STAMP DATE NOT NULL,
134
  COMMENTS VARCHAR2(4000 BYTE)
135
)
136
  TABLESPACE "USERS"
137
  LOGGING 
138
  PCTFREE 10
139
  PCTUSED 40
140
  INITRANS 1
141
  MAXTRANS 255
142
  STORAGE
143
  (
144
    INITIAL 128K
145
    MINEXTENTS 1
146
    MAXEXTENTS 2147483645
147
    FREELISTS 1
148
    FREELIST GROUPS 1
149
    BUFFER_POOL DEFAULT
150
  )
151
;
152
 
153
CREATE TABLE DATA_TABLES
154
(
155
  DT_ID NUMBER NOT NULL,
156
  OBJ_ID NUMBER NOT NULL,
157
  TABLE_NAME VARCHAR2(1000 BYTE) NOT NULL,
158
  REF_COLUMN_NAME VARCHAR2(1000 BYTE) NOT NULL,
159
  DISPLAY_COLUMN_NAME VARCHAR2(1000 BYTE) NOT NULL
160
, CONSTRAINT PK_DATA_TABLES PRIMARY KEY
161
  (
162
    DT_ID
163
  )
164
  ENABLE
165
)
166
  TABLESPACE "USERS"
167
  LOGGING 
168
  PCTFREE 10
169
  PCTUSED 40
170
  INITRANS 1
171
  MAXTRANS 255
172
  STORAGE
173
  (
174
    INITIAL 128K
175
    MINEXTENTS 1
176
    MAXEXTENTS 2147483645
177
    FREELISTS 1
178
    FREELIST GROUPS 1
179
    BUFFER_POOL DEFAULT
180
  )
181
;
182
 
183
CREATE TABLE ROLE_PRIVILEGES
184
(
185
  ROLE_ID NUMBER NOT NULL,
186
  OBJ_ID NUMBER NOT NULL,
187
  PERM_ID NUMBER NOT NULL,
188
  PERM_VALUE CHAR(1 BYTE) NOT NULL
189
)
190
  TABLESPACE "USERS"
191
  LOGGING 
192
  PCTFREE 10
193
  PCTUSED 40
194
  INITRANS 1
195
  MAXTRANS 255
196
  STORAGE
197
  (
198
    INITIAL 128K
199
    MINEXTENTS 1
200
    MAXEXTENTS 2147483645
201
    FREELISTS 1
202
    FREELIST GROUPS 1
203
    BUFFER_POOL DEFAULT
204
  )
205
;
206
 
207
CREATE TABLE DATA_PERMISSIONS
208
(
209
  DT_ID NUMBER NOT NULL,
210
  ROLE_ID NUMBER NOT NULL,
211
  REF_COLUMN_VAL NUMBER NOT NULL,
212
  PERM_ID NUMBER NOT NULL,
213
  PERM_VALUE CHAR(1 BYTE) NOT NULL
214
)
215
  TABLESPACE "USERS"
216
  LOGGING 
217
  PCTFREE 10
218
  PCTUSED 40
219
  INITRANS 1
220
  MAXTRANS 255
221
  STORAGE
222
  (
223
    INITIAL 128K
224
    MINEXTENTS 1
225
    MAXEXTENTS 2147483645
226
    FREELISTS 1
227
    FREELIST GROUPS 1
228
    BUFFER_POOL DEFAULT
229
  )
230
;
231
 
232
CREATE TABLE USER_ROLES
233
(
234
  USER_ID NUMBER NOT NULL,
235
  ROLE_ID NUMBER NOT NULL
236
)
237
  TABLESPACE "USERS"
238
  LOGGING 
239
  PCTFREE 10
240
  PCTUSED 40
241
  INITRANS 1
242
  MAXTRANS 255
243
  STORAGE
244
  (
245
    INITIAL 128K
246
    MINEXTENTS 1
247
    MAXEXTENTS 2147483645
248
    FREELISTS 1
249
    FREELIST GROUPS 1
250
    BUFFER_POOL DEFAULT
251
  )
252
;
253
 
254
CREATE TABLE ROLES
255
(
256
  ROLE_ID NUMBER NOT NULL,
257
  APP_ID NUMBER NOT NULL,
258
  ROLE_NAME VARCHAR2(1000 BYTE) NOT NULL,
259
  IS_ROLE_VARIATION CHAR(1 BYTE),
260
  COMMENTS VARCHAR2(4000 BYTE)
261
, CONSTRAINT PK_ROLES PRIMARY KEY
262
  (
263
    ROLE_ID
264
  )
265
  ENABLE
266
)
267
  TABLESPACE "USERS"
268
  LOGGING 
269
  PCTFREE 10
270
  PCTUSED 40
271
  INITRANS 1
272
  MAXTRANS 255
273
  STORAGE
274
  (
275
    INITIAL 128K
276
    MINEXTENTS 1
277
    MAXEXTENTS 2147483645
278
    FREELISTS 1
279
    FREELIST GROUPS 1
280
    BUFFER_POOL DEFAULT
281
  )
282
;
283
 
284
CREATE TABLE USER_APPLICATIONS
285
(
286
  USER_ID NUMBER NOT NULL,
287
  APP_ID NUMBER NOT NULL,
288
  LAST_VISIT_STAMP DATE
289
)
290
  TABLESPACE "USERS"
291
  LOGGING 
292
  PCTFREE 10
293
  PCTUSED 40
294
  INITRANS 1
295
  MAXTRANS 255
296
  STORAGE
297
  (
298
    INITIAL 128K
299
    MINEXTENTS 1
300
    MAXEXTENTS 2147483645
301
    FREELISTS 1
302
    FREELIST GROUPS 1
303
    BUFFER_POOL DEFAULT
304
  )
305
;
306
 
307
CREATE TABLE PAGE_CONTROL_OBJECTS
308
(
309
  PAGE_ID NUMBER NOT NULL,
310
  OBJ_ID NUMBER NOT NULL
311
)
312
  TABLESPACE "USERS"
313
  LOGGING 
314
  PCTFREE 10
315
  PCTUSED 40
316
  INITRANS 1
317
  MAXTRANS 255
318
  STORAGE
319
  (
320
    INITIAL 128K
321
    MINEXTENTS 1
322
    MAXEXTENTS 2147483645
323
    FREELISTS 1
324
    FREELIST GROUPS 1
325
    BUFFER_POOL DEFAULT
326
  )
327
;
328
 
329
CREATE TABLE DEF_ACTION_BUTTONS
330
(
331
  ABTN_ID NUMBER NOT NULL,
332
  ABTN_NAME VARCHAR2(1000 BYTE) NOT NULL,
333
  TEXT VARCHAR2(50 BYTE),
334
  ACTION_LINK VARCHAR2(4000 BYTE),
335
  EVENT_HANDLER VARCHAR2(4000 BYTE),
336
  IMG_ENABLED VARCHAR2(1000 BYTE),
337
  IMG_DISABLED VARCHAR2(1000 BYTE),
338
  HINT VARCHAR2(50 BYTE),
339
  VISIBLE CHAR(1 BYTE) NOT NULL,
340
  ACTIVE CHAR(1 BYTE) NOT NULL,
341
  IS_READONLY_ACTION CHAR(1 BYTE) NOT NULL
342
, CONSTRAINT PK_DEF_ACTION_BUTTONS PRIMARY KEY
343
  (
344
    ABTN_ID
345
  )
346
  ENABLE
347
)
348
  TABLESPACE "USERS"
349
  LOGGING 
350
  PCTFREE 10
351
  PCTUSED 40
352
  INITRANS 1
353
  MAXTRANS 255
354
  STORAGE
355
  (
356
    INITIAL 128K
357
    MINEXTENTS 1
358
    MAXEXTENTS 2147483645
359
    FREELISTS 1
360
    FREELIST GROUPS 1
361
    BUFFER_POOL DEFAULT
362
  )
363
;
364
 
365
CREATE TABLE APPLICATION_PAGES
366
(
367
  PAGE_ID NUMBER NOT NULL,
368
  APP_ID NUMBER NOT NULL,
369
  PAGE_NAME VARCHAR2(1000 BYTE) NOT NULL
370
, CONSTRAINT PK_APPLICATION_PAGES PRIMARY KEY
371
  (
372
    PAGE_ID
373
  )
374
  ENABLE
375
)
376
  TABLESPACE "USERS"
377
  LOGGING 
378
  PCTFREE 10
379
  PCTUSED 40
380
  INITRANS 1
381
  MAXTRANS 255
382
  STORAGE
383
  (
384
    INITIAL 128K
385
    MINEXTENTS 1
386
    MAXEXTENTS 2147483645
387
    FREELISTS 1
388
    FREELIST GROUPS 1
389
    BUFFER_POOL DEFAULT
390
  )
391
;
392
 
393
CREATE TABLE VALIDATION_RULES
394
(
395
  FIELD_NAME VARCHAR2(1000 BYTE) NOT NULL,
396
  IS_REQUIRED CHAR(1 BYTE) NOT NULL,
397
  IS_NUMERIC CHAR(1 BYTE),
398
  MIN_NUMERIC_VALUE NUMBER,
399
  MAX_NUMERIC_VALUE NUMBER,
400
  IS_DATE CHAR(1 BYTE),
401
  START_DATE DATE,
402
  END_DATE DATE,
403
  MIN_STRING_LENGTH NUMBER,
404
  MAX_STRING_LENGTH NUMBER,
405
  REGEXP VARCHAR2(4000 BYTE),
406
  REGEXP_DESCRIPTION VARCHAR2(50 BYTE)
407
)
408
  TABLESPACE "USERS"
409
  LOGGING 
410
  PCTFREE 10
411
  PCTUSED 40
412
  INITRANS 1
413
  MAXTRANS 255
414
  STORAGE
415
  (
416
    INITIAL 128K
417
    MINEXTENTS 1
418
    MAXEXTENTS 2147483645
419
    FREELISTS 1
420
    FREELIST GROUPS 1
421
    BUFFER_POOL DEFAULT
422
  )
423
;
424
 
425
ALTER TABLE CONTROL_OBJECTS
426
ADD CONSTRAINT FK_CONTROL_OBJ_REF_APPLICS FOREIGN KEY
427
(
428
  APP_ID
429
)
430
REFERENCES APPLICATIONS
431
(
432
APP_ID
433
) ENABLE
434
;
435
 
436
ALTER TABLE DATA_TABLES
437
ADD CONSTRAINT FK_DATA_TABLE_REF_OBJ FOREIGN KEY
438
(
439
  OBJ_ID
440
)
441
REFERENCES CONTROL_OBJECTS
442
(
443
OBJ_ID
444
) ENABLE
445
;
446
 
447
ALTER TABLE ROLE_PRIVILEGES
448
ADD CONSTRAINT FK_ROLE_OBJ_REF_ROLES FOREIGN KEY
449
(
450
  ROLE_ID
451
)
452
REFERENCES ROLES
453
(
454
ROLE_ID
455
) ENABLE
456
;
457
 
458
ALTER TABLE ROLE_PRIVILEGES
459
ADD CONSTRAINT FK_ROLE_OBJ_REF_OBJS FOREIGN KEY
460
(
461
  OBJ_ID
462
)
463
REFERENCES CONTROL_OBJECTS
464
(
465
OBJ_ID
466
) ENABLE
467
;
468
 
469
ALTER TABLE ROLE_PRIVILEGES
470
ADD CONSTRAINT FK_ROLE_OBJ_REF_PERMISS FOREIGN KEY
471
(
472
  PERM_ID
473
)
474
REFERENCES PERMISSION_TYPES
475
(
476
PERM_ID
477
) ENABLE
478
;
479
 
480
ALTER TABLE DATA_PERMISSIONS
481
ADD CONSTRAINT FK_DATA_PER_REF_ROLES FOREIGN KEY
482
(
483
  ROLE_ID
484
)
485
REFERENCES ROLES
486
(
487
ROLE_ID
488
) ENABLE
489
;
490
 
491
ALTER TABLE DATA_PERMISSIONS
492
ADD CONSTRAINT FK_DATA_PERM_REF_PERM_TYPES FOREIGN KEY
493
(
494
  PERM_ID
495
)
496
REFERENCES PERMISSION_TYPES
497
(
498
PERM_ID
499
) ENABLE
500
;
501
 
502
ALTER TABLE DATA_PERMISSIONS
503
ADD CONSTRAINT FK_DATA_PERM_REF_DATA_TABLE FOREIGN KEY
504
(
505
  DT_ID
506
)
507
REFERENCES DATA_TABLES
508
(
509
DT_ID
510
) ENABLE
511
;
512
 
513
ALTER TABLE USER_ROLES
514
ADD CONSTRAINT FK_USER_ROLES_REF_ROLES FOREIGN KEY
515
(
516
  ROLE_ID
517
)
518
REFERENCES ROLES
519
(
520
ROLE_ID
521
) ENABLE
522
;
523
 
524
ALTER TABLE USER_ROLES
525
ADD CONSTRAINT FK_USER_ROLES_REF_USERS FOREIGN KEY
526
(
527
  USER_ID
528
)
529
REFERENCES USERS
530
(
531
USER_ID
532
) ENABLE
533
;
534
 
535
ALTER TABLE ROLES
536
ADD CONSTRAINT FK_ROLES_REF_APPLICS FOREIGN KEY
537
(
538
  APP_ID
539
)
540
REFERENCES APPLICATIONS
541
(
542
APP_ID
543
) ENABLE
544
;
545
 
546
ALTER TABLE USER_APPLICATIONS
547
ADD CONSTRAINT FK_USER_APP_REF_USERS FOREIGN KEY
548
(
549
  USER_ID
550
)
551
REFERENCES USERS
552
(
553
USER_ID
554
) ENABLE
555
;
556
 
557
ALTER TABLE USER_APPLICATIONS
558
ADD CONSTRAINT FK_USER_APPS_REF_APPS FOREIGN KEY
559
(
560
  APP_ID
561
)
562
REFERENCES APPLICATIONS
563
(
564
APP_ID
565
) ENABLE
566
;
567
 
568
ALTER TABLE PAGE_CONTROL_OBJECTS
569
ADD CONSTRAINT FK_PAGE_CON_REF_APP_PAGES FOREIGN KEY
570
(
571
  PAGE_ID
572
)
573
REFERENCES APPLICATION_PAGES
574
(
575
PAGE_ID
576
) ENABLE
577
;
578
 
579
ALTER TABLE PAGE_CONTROL_OBJECTS
580
ADD CONSTRAINT FK_PAGE_CON_REF_CONTROL_OBJS FOREIGN KEY
581
(
582
  OBJ_ID
583
)
584
REFERENCES CONTROL_OBJECTS
585
(
586
OBJ_ID
587
) ENABLE
588
;
589
 
590
ALTER TABLE APPLICATION_PAGES
591
ADD CONSTRAINT FK_APP_PAGE_REF_APP FOREIGN KEY
592
(
593
  APP_ID
594
)
595
REFERENCES APPLICATIONS
596
(
597
APP_ID
598
) ENABLE
599
;
600
 
601
CREATE UNIQUE INDEX UNQ_CONTROL_OBJ ON CONTROL_OBJECTS (APP_ID ASC, OBJ_NAME ASC)  TABLESPACE "USERS"
602
  LOGGING 
603
  PCTFREE 10
604
  INITRANS 2
605
  MAXTRANS 255
606
  STORAGE
607
  (
608
    INITIAL 128K
609
    MINEXTENTS 1
610
    MAXEXTENTS 2147483645
611
    FREELISTS 1
612
    FREELIST GROUPS 1
613
    BUFFER_POOL DEFAULT
614
  )
615
;
616
 
617
CREATE UNIQUE INDEX UNQ_PERMISSION_TYPES ON PERMISSION_TYPES (PERM_NAME ASC)  TABLESPACE "USERS"
618
  LOGGING 
619
  PCTFREE 10
620
  INITRANS 2
621
  MAXTRANS 255
622
  STORAGE
623
  (
624
    INITIAL 128K
625
    MINEXTENTS 1
626
    MAXEXTENTS 2147483645
627
    FREELISTS 1
628
    FREELIST GROUPS 1
629
    BUFFER_POOL DEFAULT
630
  )
631
;
632
 
633
CREATE UNIQUE INDEX UNQ_APPLICATIONS ON APPLICATIONS (APPLICATION_NAME ASC)  TABLESPACE "USERS"
634
  LOGGING 
635
  PCTFREE 10
636
  INITRANS 2
637
  MAXTRANS 255
638
  STORAGE
639
  (
640
    INITIAL 128K
641
    MINEXTENTS 1
642
    MAXEXTENTS 2147483645
643
    FREELISTS 1
644
    FREELIST GROUPS 1
645
    BUFFER_POOL DEFAULT
646
  )
647
;
648
 
649
CREATE UNIQUE INDEX UNQ_USERS ON USERS (USER_NAME ASC)  TABLESPACE "USERS"
650
  LOGGING 
651
  PCTFREE 10
652
  INITRANS 2
653
  MAXTRANS 255
654
  STORAGE
655
  (
656
    INITIAL 128K
657
    MINEXTENTS 1
658
    MAXEXTENTS 2147483645
659
    FREELISTS 1
660
    FREELIST GROUPS 1
661
    BUFFER_POOL DEFAULT
662
  )
663
;
664
 
665
CREATE INDEX INX_CLIENT_IP ON LOGIN_TRAIL (CLIENT_IP ASC)  TABLESPACE "USERS"
666
  LOGGING 
667
  PCTFREE 10
668
  INITRANS 2
669
  MAXTRANS 255
670
  STORAGE
671
  (
672
    INITIAL 128K
673
    MINEXTENTS 1
674
    MAXEXTENTS 2147483645
675
    FREELISTS 1
676
    FREELIST GROUPS 1
677
    BUFFER_POOL DEFAULT
678
  )
679
;
680
 
681
CREATE INDEX INX_ENUM_EVENT ON LOGIN_TRAIL (ENUM_EVENT ASC)  TABLESPACE "USERS"
682
  LOGGING 
683
  PCTFREE 10
684
  INITRANS 2
685
  MAXTRANS 255
686
  STORAGE
687
  (
688
    INITIAL 128K
689
    MINEXTENTS 1
690
    MAXEXTENTS 2147483645
691
    FREELISTS 1
692
    FREELIST GROUPS 1
693
    BUFFER_POOL DEFAULT
694
  )
695
;
696
 
697
CREATE INDEX INX_USER_NAME ON LOGIN_TRAIL (USER_NAME ASC)  TABLESPACE "USERS"
698
  LOGGING 
699
  PCTFREE 10
700
  INITRANS 2
701
  MAXTRANS 255
702
  STORAGE
703
  (
704
    INITIAL 128K
705
    MINEXTENTS 1
706
    MAXEXTENTS 2147483645
707
    FREELISTS 1
708
    FREELIST GROUPS 1
709
    BUFFER_POOL DEFAULT
710
  )
711
;
712
 
713
CREATE UNIQUE INDEX UNQ_DATA_TABLE ON DATA_TABLES (TABLE_NAME ASC, OBJ_ID ASC, REF_COLUMN_NAME ASC)  TABLESPACE "USERS"
714
  LOGGING 
715
  PCTFREE 10
716
  INITRANS 2
717
  MAXTRANS 255
718
  STORAGE
719
  (
720
    INITIAL 128K
721
    MINEXTENTS 1
722
    MAXEXTENTS 2147483645
723
    FREELISTS 1
724
    FREELIST GROUPS 1
725
    BUFFER_POOL DEFAULT
726
  )
727
;
728
 
729
CREATE UNIQUE INDEX UNQ_ROLE_OBJ_PERM ON ROLE_PRIVILEGES (ROLE_ID ASC, OBJ_ID ASC, PERM_ID ASC)  TABLESPACE "USERS"
730
  LOGGING 
731
  PCTFREE 10
732
  INITRANS 2
733
  MAXTRANS 255
734
  STORAGE
735
  (
736
    INITIAL 128K
737
    MINEXTENTS 1
738
    MAXEXTENTS 2147483645
739
    FREELISTS 1
740
    FREELIST GROUPS 1
741
    BUFFER_POOL DEFAULT
742
  )
743
;
744
 
745
CREATE UNIQUE INDEX UNQ_DATA_PERM ON DATA_PERMISSIONS (DT_ID ASC, ROLE_ID ASC, REF_COLUMN_VAL ASC, PERM_ID ASC)  TABLESPACE "USERS"
746
  LOGGING 
747
  PCTFREE 10
748
  INITRANS 2
749
  MAXTRANS 255
750
  STORAGE
751
  (
752
    INITIAL 128K
753
    MINEXTENTS 1
754
    MAXEXTENTS 2147483645
755
    FREELISTS 1
756
    FREELIST GROUPS 1
757
    BUFFER_POOL DEFAULT
758
  )
759
;
760
 
761
CREATE UNIQUE INDEX UNQ_USER_ROLES ON USER_ROLES (USER_ID ASC, ROLE_ID ASC)  TABLESPACE "USERS"
762
  LOGGING 
763
  PCTFREE 10
764
  INITRANS 2
765
  MAXTRANS 255
766
  STORAGE
767
  (
768
    INITIAL 128K
769
    MINEXTENTS 1
770
    MAXEXTENTS 2147483645
771
    FREELISTS 1
772
    FREELIST GROUPS 1
773
    BUFFER_POOL DEFAULT
774
  )
775
;
776
 
777
CREATE UNIQUE INDEX UNQ_ROLES ON ROLES (APP_ID ASC, ROLE_NAME ASC)  TABLESPACE "USERS"
778
  LOGGING 
779
  PCTFREE 10
780
  INITRANS 2
781
  MAXTRANS 255
782
  STORAGE
783
  (
784
    INITIAL 128K
785
    MINEXTENTS 1
786
    MAXEXTENTS 2147483645
787
    FREELISTS 1
788
    FREELIST GROUPS 1
789
    BUFFER_POOL DEFAULT
790
  )
791
;
792
 
793
CREATE UNIQUE INDEX UNQ_USER_APPS ON USER_APPLICATIONS (USER_ID ASC, APP_ID ASC)  TABLESPACE "USERS"
794
  LOGGING 
795
  PCTFREE 10
796
  INITRANS 2
797
  MAXTRANS 255
798
  STORAGE
799
  (
800
    INITIAL 128K
801
    MINEXTENTS 1
802
    MAXEXTENTS 2147483645
803
    FREELISTS 1
804
    FREELIST GROUPS 1
805
    BUFFER_POOL DEFAULT
806
  )
807
;
808
 
809
CREATE UNIQUE INDEX UNQ_PAGE_COBJ ON PAGE_CONTROL_OBJECTS (PAGE_ID ASC, OBJ_ID ASC)  TABLESPACE "USERS"
810
  LOGGING 
811
  PCTFREE 10
812
  INITRANS 2
813
  MAXTRANS 255
814
  STORAGE
815
  (
816
    INITIAL 128K
817
    MINEXTENTS 1
818
    MAXEXTENTS 2147483645
819
    FREELISTS 1
820
    FREELIST GROUPS 1
821
    BUFFER_POOL DEFAULT
822
  )
823
;
824
 
825
CREATE UNIQUE INDEX UNQ_ABTN_DEF ON DEF_ACTION_BUTTONS (ABTN_NAME ASC)  TABLESPACE "USERS"
826
  LOGGING 
827
  PCTFREE 10
828
  INITRANS 2
829
  MAXTRANS 255
830
  STORAGE
831
  (
832
    INITIAL 128K
833
    MINEXTENTS 1
834
    MAXEXTENTS 2147483645
835
    FREELISTS 1
836
    FREELIST GROUPS 1
837
    BUFFER_POOL DEFAULT
838
  )
839
;
840
 
841
CREATE UNIQUE INDEX UNQ_APP_PAGES ON APPLICATION_PAGES (APP_ID ASC, PAGE_NAME ASC)  TABLESPACE "USERS"
842
  LOGGING 
843
  PCTFREE 10
844
  INITRANS 2
845
  MAXTRANS 255
846
  STORAGE
847
  (
848
    INITIAL 128K
849
    MINEXTENTS 1
850
    MAXEXTENTS 2147483645
851
    FREELISTS 1
852
    FREELIST GROUPS 1
853
    BUFFER_POOL DEFAULT
854
  )
855
;
856
 
857
CREATE UNIQUE INDEX UNQ_VALIDATION_RULES ON VALIDATION_RULES (FIELD_NAME ASC)  TABLESPACE "USERS"
858
  LOGGING 
859
  PCTFREE 10
860
  INITRANS 2
861
  MAXTRANS 255
862
  STORAGE
863
  (
864
    INITIAL 128K
865
    MINEXTENTS 1
866
    MAXEXTENTS 2147483645
867
    FREELISTS 1
868
    FREELIST GROUPS 1
869
    BUFFER_POOL DEFAULT
870
  )
871
;
872
 
873
CREATE SEQUENCE SEQ_APP_ID INCREMENT BY 1 MAXVALUE 999999999999999999999999999 MINVALUE 1 CACHE 20 ORDER ;
874
 
875
CREATE SEQUENCE SEQ_ROLE_ID INCREMENT BY 1 MAXVALUE 999999999999999999999999999 MINVALUE 1 CACHE 20 ORDER ;
876
 
877
CREATE SEQUENCE SEQ_USER_ID INCREMENT BY 1 MAXVALUE 999999999999999999999999999 MINVALUE 1 CACHE 20 ORDER ;
878
 
879
CREATE SEQUENCE SEQ_DT_ID INCREMENT BY 1 MAXVALUE 999999999999999999999999999 MINVALUE 1 CACHE 20 ORDER ;
880
 
881
CREATE SEQUENCE SEQ_OBJ_ID INCREMENT BY 1 MAXVALUE 999999999999999999999999999 MINVALUE 1 CACHE 20 ORDER ;
882
 
883
CREATE OR REPLACE SYNONYM RM_PROJECTS FOR RELEASE_MANAGER.PROJECTS;
884
 
885
CREATE OR REPLACE SYNONYM DM_DEF_MENU_ITEMS FOR DEF_MENU_ITEMS;
886
 
887
CREATE OR REPLACE SYNONYM DM_DM_PROJECTS FOR DM_PROJECTS;
888
 
889
CREATE OR REPLACE SYNONYM PM_DM_PROJECTS FOR DEPLOYMENT_MANAGER.DM_PROJECTS;
890
 
891
CREATE OR REPLACE SYNONYM PROJECTS FOR RELEASE_MANAGER.PROJECTS;
892
 
893
CREATE OR REPLACE FUNCTION IN_LIST_NUMBER ( sInList IN VARCHAR2 ) RETURN ACCMGR_NUMBER_TAB_t IS
894
 
895
/* ---------------------------------------------------------------------------
896
    Version: 1.0.0
897
   --------------------------------------------------------------------------- */
898
 
899
    sync_rtags		   ACCMGR_NUMBER_TAB_t := ACCMGR_NUMBER_TAB_t();
900
	pos				   NUMBER;
901
	in_list			   VARCHAR2(4000) := sInList || ',';
902
 
903
BEGIN
904
 
905
	IF NOT sInList IS NULL
906
	THEN
907
		LOOP
908
	        EXIT WHEN in_list IS NULL;
909
	        pos := INSTR ( in_list, ',' );
910
	        sync_rtags.extend;
911
	        sync_rtags(sync_rtags.count) := LTRIM ( RTRIM ( SUBSTR ( in_list, 1, pos-1 ) ) );
912
	        in_list := SUBSTR ( in_list, pos+1 );
913
		END LOOP;
914
	END IF;
915
 
916
	RETURN sync_rtags;
917
END IN_LIST_NUMBER;
918
/
919
 
920
CREATE OR REPLACE PACKAGE PK_SECURITY IS      
921
 
922
/*
923
------------------------------
924
||  Last Modified:  S.Vukovic
925
||  Modified Date:  28/Apr/2005  
926
||  Spec Version:   1.0
927
------------------------------
928
*/
929
 
930
	TYPE typeCur IS REF CURSOR;  
931
 
932
    /*================================================================================================*/
933
    --FUNCTION GET_USER_BY_ID ( ID IN NUMBER, records OUT typeCur ) RETURN NUMBER;
934
    --FUNCTION GET_USER_BY_USERNAME ( UserName IN VARCHAR2, records OUT typeCur ) RETURN NUMBER;   
935
    --FUNCTION GET_USER_PERMISSIONS ( UserSK IN NUMBER, ActionNameFilter IN VARCHAR2, records OUT typeCur ) RETURN NUMBER;   
936
    --FUNCTION AUTHENTICATE ( UserName IN VARCHAR2,
937
    --                        UserPassword IN VARCHAR2,
938
    --                       records OUT typeCur ) RETURN NUMBER;
939
    /*================================================================================================*/
940
	PROCEDURE GET_USER_STATIC_PERMISSIONS ( UsedId IN NUMBER, AppId IN NUMBER, RecordSet OUT typeCur);
941
	PROCEDURE GET_USER_DATA_PERMISSIONS ( UsedId IN NUMBER, AppId IN NUMBER, RecordSet OUT typeCur);
942
	FUNCTION IS_LOCAL_PASSWORD_CORRECT ( UserName IN VARCHAR2, UserPassword IN VARCHAR2 ) RETURN NUMBER;
943
	FUNCTION Set_Password ( sUserName IN VARCHAR2, sPasswordA IN VARCHAR2, sPasswordB IN VARCHAR2 ) RETURN NUMBER;
944
	/*================================================================================================*/
945
 
946
END PK_SECURITY;
947
/
948
 
949
CREATE OR REPLACE FUNCTION IS_SAME_STRING ( sStringOne IN VARCHAR2,
950
	   	  		  		   				  	sStringTwo IN VARCHAR2 ) RETURN BOOLEAN IS
951
 
952
/* ---------------------------------------------------------------------------
953
    Version: 1.0.0
954
   --------------------------------------------------------------------------- */
955
 
956
ReturnValue BOOLEAN DEFAULT FALSE;
957
 
958
BEGIN
959
 
960
	--- Compare ---
961
	IF ( NVL( sStringOne, '' ) || 'APPEND' = NVL( sStringTwo, '' ) || 'APPEND' ) THEN
962
	   -- Strings are the same
963
	   ReturnValue := TRUE;
964
 
965
	END IF; 
966
 
967
	RETURN ReturnValue;
968
END IS_SAME_STRING;
969
/
970
 
971
CREATE OR REPLACE PACKAGE pk_Application IS
972
 
973
PROCEDURE Add_Application ( sAppName IN APPLICATIONS.APPLICATION_NAME%TYPE,
974
		  				  	sAppAcronym IN APPLICATIONS.ACRONYM%TYPE );
975
 
976
PROCEDURE Remove_Application ( nAppId IN APPLICATIONS.APP_ID%TYPE );							
977
 
978
 
979
END pk_Application;
980
/
981
 
982
CREATE OR REPLACE PACKAGE pk_AMUtils IS
983
 
984
	PROCEDURE Log_Access ( nEvent IN LOGIN_TRAIL.ENUM_EVENT%TYPE,
985
			  			   sUserName IN LOGIN_TRAIL.USER_NAME%TYPE,
986
						   sClientIp IN LOGIN_TRAIL.CLIENT_IP%TYPE,
987
						   nAppId IN LOGIN_TRAIL.APP_ID%TYPE,
988
						   sComments IN LOGIN_TRAIL.COMMENTS%TYPE,
989
						   nUserId IN NUMBER DEFAULT NULL );		
990
 
991
	FUNCTION Get_Hash ( sText IN VARCHAR2 ) RETURN VARCHAR2;					   			  						  				  				 
992
 
993
END pk_AMUtils;
994
/
995
 
996
CREATE OR REPLACE TYPE "ACCMGR_NUMBER_TAB_T"                                                                          as TABLE of NUMBER
997
/
998
 
999
CREATE OR REPLACE PACKAGE pk_Role IS
1000
 
1001
 
1002
PROCEDURE Add_Role ( sRoleName IN ROLES.ROLE_NAME%TYPE,
1003
		  		   	 sRoleComments IN ROLES.COMMENTS%TYPE,
1004
				   	 nAppId IN ROLES.APP_ID%TYPE  );  
1005
 
1006
PROCEDURE Remove_Role ( sRoleIdList IN VARCHAR2 );					 
1007
 
1008
PROCEDURE Set_Role_Permissions ( nRoleId IN ROLE_PRIVILEGES.ROLE_ID%TYPE,
1009
		  					   	 nObjId IN ROLE_PRIVILEGES.OBJ_ID%TYPE,
1010
							   	 cIsVisible IN ROLE_PRIVILEGES.PERM_VALUE%TYPE DEFAULT NULL,
1011
							   	 cIsActive IN ROLE_PRIVILEGES.PERM_VALUE%TYPE  DEFAULT NULL );
1012
 
1013
PROCEDURE Set_Role_Variation_Permissions ( nUserId IN USER_ROLES.USER_ID%TYPE,
1014
		  								   nAppId IN ROLES.APP_ID%TYPE,
1015
										   nRoleId IN ROLES.ROLE_ID%TYPE,
1016
		  								   nObjId IN ROLE_PRIVILEGES.OBJ_ID%TYPE,
1017
									   	   cIsVisible IN ROLE_PRIVILEGES.PERM_VALUE%TYPE DEFAULT NULL,
1018
									   	   cIsActive IN ROLE_PRIVILEGES.PERM_VALUE%TYPE  DEFAULT NULL );
1019
 
1020
FUNCTION Is_Permissions_Changed ( nRoleId IN ROLE_PRIVILEGES.ROLE_ID%TYPE,
1021
  								  nObjId IN ROLE_PRIVILEGES.OBJ_ID%TYPE,
1022
							   	  cIsVisible IN ROLE_PRIVILEGES.PERM_VALUE%TYPE,
1023
							   	  cIsActive IN ROLE_PRIVILEGES.PERM_VALUE%TYPE ) RETURN BOOLEAN;	
1024
 
1025
FUNCTION Is_Role_Variation ( nRoleId IN ROLES.ROLE_ID%TYPE ) RETURN BOOLEAN;								  									   								 
1026
 
1027
PROCEDURE Delete_Role_Permission ( nRoleId IN ROLE_PRIVILEGES.ROLE_ID%TYPE,
1028
		  						  nObjId IN ROLE_PRIVILEGES.OBJ_ID%TYPE,
1029
								  nPermId IN ROLE_PRIVILEGES.PERM_ID%TYPE );	
1030
 
1031
PROCEDURE Grant_Role ( sRoleIdList IN VARCHAR2,
1032
		  			   nUserId IN USER_ROLES.USER_ID%TYPE );
1033
 
1034
PROCEDURE Revoke_Role ( sRoleIdList IN VARCHAR2,
1035
		  			    nUserId IN USER_ROLES.USER_ID%TYPE );					   								  				  
1036
 
1037
 
1038
END pk_Role;
1039
/
1040
 
1041
CREATE OR REPLACE PACKAGE pk_user IS
1042
/*
1043
------------------------------
1044
||  Last Modified:  J.Tweddle
1045
||  Modified Date:  21/Jan/2008
1046
||  Spec Version:   2.1
1047
------------------------------
1048
*/
1049
 
1050
PROCEDURE Add_User_Account ( sFullName IN USERS.FULL_NAME%TYPE,
1051
		  		   	 	   	 sUserName IN USERS.USER_NAME%TYPE,
1052
							 sUserEmail IN USERS.USER_EMAIL%TYPE,
1053
							 sDomain IN USERS.DOMAIN%TYPE   );
1054
 
1055
PROCEDURE Update_User_Account ( sUserId IN VARCHAR2, sFullName IN USERS.FULL_NAME%TYPE,
1056
		  		   	 	   	 sUserName IN USERS.USER_NAME%TYPE,
1057
							 sUserEmail IN USERS.USER_EMAIL%TYPE,
1058
							 sDomain IN USERS.DOMAIN%TYPE   );
1059
 
1060
PROCEDURE Add_Application_User ( sUserIdList IN VARCHAR2,
1061
		  					   	 nAppId IN USER_APPLICATIONS.APP_ID%TYPE,
1062
								 cIncludeEveryone IN CHAR );
1063
 
1064
PROCEDURE Remove_Application_User ( sUserIdList IN VARCHAR2,
1065
		  					   	  	nAppId IN USER_APPLICATIONS.APP_ID%TYPE,
1066
									cIncludeEveryone IN CHAR DEFAULT NULL );	
1067
 
1068
PROCEDURE Add_Role_Member ( sUserIdList IN VARCHAR2,
1069
		  					nRoleId IN USER_ROLES.ROLE_ID%TYPE,
1070
							cIncludeEveryone IN CHAR );
1071
 
1072
PROCEDURE Remove_Role_Member ( sUserIdList IN VARCHAR2,
1073
		  					   nRoleId IN USER_ROLES.ROLE_ID%TYPE,
1074
							   cIncludeEveryone IN CHAR DEFAULT NULL);									
1075
 
1076
PROCEDURE Disable_Users ( sUserIdList IN VARCHAR2,
1077
 					   	  nAppId IN USER_APPLICATIONS.APP_ID%TYPE );	
1078
 
1079
PROCEDURE Remove_User_Account ( sUserIdList IN VARCHAR2 );
1080
 
1081
END pk_user;
1082
/
1083
 
1084
CREATE OR REPLACE PACKAGE pk_Control IS
1085
 
1086
 
1087
PROCEDURE Add_Control ( sObjName IN CONTROL_OBJECTS.OBJ_NAME%TYPE,
1088
		  		   	  	sObjDescription IN CONTROL_OBJECTS.OBJ_DESCRIPTION%TYPE,
1089
					 	nAppId IN CONTROL_OBJECTS.APP_ID%TYPE
1090
		  		   	 	); 
1091
 
1092
PROCEDURE Remove_Control ( sObjIdList IN VARCHAR2 );	
1093
 
1094
 
1095
PROCEDURE Set_Row_Permissions ( nDtId IN DATA_PERMISSIONS.DT_ID%TYPE,
1096
							  	nRoleId IN DATA_PERMISSIONS.ROLE_ID%TYPE,
1097
							 	nRefCol IN DATA_PERMISSIONS.REF_COLUMN_VAL%TYPE,
1098
						     	cIsVisible IN DATA_PERMISSIONS.PERM_VALUE%TYPE DEFAULT NULL,
1099
						     	cIsActive IN DATA_PERMISSIONS.PERM_VALUE%TYPE  DEFAULT NULL );
1100
 
1101
 
1102
PROCEDURE Delete_Data_Permission ( nDtId IN DATA_PERMISSIONS.DT_ID%TYPE,
1103
								   nRoleId IN DATA_PERMISSIONS.ROLE_ID%TYPE,
1104
								   nRefCol IN DATA_PERMISSIONS.REF_COLUMN_VAL%TYPE );
1105
 
1106
PROCEDURE Add_DataTable ( nObjId IN DATA_TABLES.OBJ_ID%TYPE,
1107
						  sTableName IN DATA_TABLES.TABLE_NAME%TYPE,
1108
						  sRefColumn IN DATA_TABLES.REF_COLUMN_NAME%TYPE,
1109
						  sDisplayColumn IN DATA_TABLES.DISPLAY_COLUMN_NAME%TYPE
1110
		  		   	 	);								   
1111
 
1112
PROCEDURE Remove_DataTable ( DtId IN NUMBER );								   
1113
 
1114
 
1115
 
1116
END pk_Control;
1117
/
1118
 
1119
CREATE OR REPLACE PACKAGE BODY PK_SECURITY IS     
1120
 
1121
/*
1122
------------------------------
1123
||  Last Modified:  S.Vukovic
1124
||  Modified Date:  28/Apr/2005  
1125
||  Body Version:   1.0
1126
------------------------------
1127
*/
1128
 
1129
/*-------------------------------------------------------------------------------------------------------*/
1130
FUNCTION IS_LOCAL_PASSWORD_CORRECT ( UserName IN VARCHAR2, UserPassword IN VARCHAR2 ) RETURN NUMBER IS
1131
	encryptedUserPassword VARCHAR2(4000);
1132
BEGIN
1133
	SELECT usr.USER_PASSWORD INTO encryptedUserPassword
1134
	  FROM USERS usr
1135
	 WHERE usr.USER_NAME = UserName;
1136
 
1137
	IF encryptedUserPassword = PK_AMUTILS.GET_HASH( UserPassword ) THEN
1138
		-- Password Correct
1139
		RETURN 1;
1140
	ELSE
1141
		-- Password Incorrect
1142
		RETURN -1; 
1143
	END IF;	 
1144
END;
1145
/*--------------------------------------------------------------------------------------------------*/
1146
FUNCTION Set_Password ( sUserName IN VARCHAR2, sPasswordA IN VARCHAR2, sPasswordB IN VARCHAR2 ) RETURN NUMBER IS
1147
 
1148
 
1149
BEGIN
1150
	-- Used to set password for the first time. 
1151
	-- It can only be set if previous password in null
1152
 
1153
	/*--------------- Business Rules Here -------------------*/
1154
	/*-------------------------------------------------------*/
1155
 
1156
	IF sPasswordA = sPasswordB THEN
1157
		-- Update passwords
1158
		UPDATE USERS usr SET
1159
		  usr.USER_PASSWORD = PK_AMUTILS.Get_Hash ( sPasswordA )
1160
		WHERE usr.USER_NAME = sUserName
1161
		  AND usr.USER_PASSWORD IS NULL;
1162
 
1163
		-- Successfull update
1164
		RETURN 1;	  
1165
 
1166
	ELSE
1167
		-- Password mistmatch
1168
		RETURN -1;	
1169
	END IF;
1170
 
1171
 
1172
END;
1173
/*-------------------------------------------------------------------------------------------------------*/
1174
PROCEDURE GET_USER_STATIC_PERMISSIONS ( UsedId IN NUMBER, AppId IN NUMBER, RecordSet OUT typeCur) IS
1175
 
1176
BEGIN
1177
 
1178
	OPEN RecordSet FOR
1179
	SELECT co.obj_name, perm.perm_id, perm.perm_value
1180
	  FROM (
1181
 
1182
	  	    (
1183
	  	    /* All 'Y' User Permissions */	  
1184
 
1185
			/* Get all 'Y' permissions */
1186
			SELECT DISTINCT rp.OBJ_ID, rp.PERM_ID, rp.PERM_VALUE
1187
			  FROM USER_ROLES ur,
1188
			  	   ROLE_PRIVILEGES rp,
1189
				   ROLES ro
1190
	         WHERE ur.ROLE_ID = ro.ROLE_ID
1191
			   AND rp.ROLE_ID = ro.ROLE_ID
1192
			   AND ur.USER_ID = UsedId
1193
			   AND rp.PERM_VALUE = 'Y'	
1194
			   --AND ro.APP_ID = AppId   
1195
			MINUS
1196
			/* Revoke permissions if they set to 'N'*/
1197
			SELECT DISTINCT rp.OBJ_ID, rp.PERM_ID, 'Y' AS PERM_VALUE
1198
			  FROM USER_ROLES ur,
1199
			  	   ROLE_PRIVILEGES rp,
1200
				   ROLES ro
1201
	         WHERE ur.ROLE_ID = ro.ROLE_ID
1202
			   AND rp.ROLE_ID = ro.ROLE_ID
1203
			   AND ur.USER_ID = UsedId
1204
			   AND rp.PERM_VALUE = 'N'	
1205
			  -- AND ro.APP_ID = AppId
1206
 
1207
			)
1208
 
1209
			MINUS    
1210
 
1211
			/* Role Variant Revokes */   
1212
			SELECT DISTINCT rp.OBJ_ID, rp.perm_id, 'Y' AS perm_value
1213
			  FROM role_privileges rp,
1214
			       ROLES ro,
1215
			       user_roles ur
1216
			 WHERE ro.role_id = rp.role_id
1217
			   AND ro.role_id = ur.role_id
1218
			   AND rp.PERM_VALUE = 'N'
1219
			   AND ro.IS_ROLE_VARIATION = 'Y'
1220
			   AND ur.user_id = UsedId
1221
			  -- AND ro.APP_ID = AppId 
1222
 
1223
	  	   ) perm,
1224
	       control_objects co
1225
	 WHERE perm.obj_id = co.obj_id;
1226
	  -- AND co.APP_ID = AppId;
1227
 
1228
 
1229
END;
1230
/*-------------------------------------------------------------------------------------------------------*/
1231
PROCEDURE GET_USER_DATA_PERMISSIONS ( UsedId IN NUMBER, AppId IN NUMBER, RecordSet OUT typeCur) IS
1232
 
1233
BEGIN
1234
 
1235
	OPEN RecordSet FOR
1236
	SELECT qry.TABLE_NAME,
1237
	 	   qry.REF_COLUMN_VAL,
1238
	 	   qry.PERM_ID,
1239
	 	   qry.PERM_VALUE
1240
	  FROM CONTROL_OBJECTS co,
1241
		   DATA_TABLES dt,
1242
			(
1243
 
1244
			/* Access Control Data Permissions */	
1245
			 SELECT bl.DT_ID,
1246
			 		bl.TABLE_NAME,
1247
			 		bl.REF_COLUMN_VAL,
1248
			 		bl.PERM_ID,
1249
			 		DECODE ( yc.PERM_VALUE,
1250
			 	 		   	 NULL, bl.PERM_VALUE,
1251
			 			 	 yc.PERM_VALUE ) AS PERM_VALUE
1252
			  FROM (
1253
			       	/* Get base list for Data Permissions */   
1254
				 	SELECT rol.ROLE_ID, dt.DT_ID, dt.TABLE_NAME, 0 AS REF_COLUMN_VAL, pt.PERM_ID, 'Y' AS PERM_VALUE 
1255
				 	  FROM CONTROL_OBJECTS co,
1256
				 	  	   DATA_TABLES dt,
1257
				 		   PERMISSION_TYPES pt,
1258
				 		   (
1259
				 		    /* Get User Roles for this Application */
1260
				 		    SELECT ro.*
1261
				 			  FROM ROLES ro,
1262
				 			  	   USER_ROLES ur
1263
				 			 WHERE ur.ROLE_ID = ro.ROLE_ID
1264
				 			   --AND ro.APP_ID = AppId
1265
				 			   AND ur.USER_ID = UsedId
1266
				 		   ) rol
1267
				 	 WHERE dt.OBJ_ID = co.OBJ_ID
1268
				 	   --AND co.APP_ID = AppId
1269
			  	   ) bl,
1270
			       (
1271
			 		 /* Find only 'Y' Permissions, which will change 'All' permission to 'N' */
1272
			 		 SELECT dt.DT_ID, 0 AS REF_COLUMN_VAL, dp.PERM_ID, 'N' AS PERM_VALUE, COUNT(*) AS YES_COUNT 
1273
			 		  FROM DATA_PERMISSIONS dp,
1274
			 		  	   DATA_TABLES dt,
1275
			 			   ROLES ro,
1276
			 			   USER_ROLES ur
1277
			 		 WHERE ur.ROLE_ID = ro.ROLE_ID
1278
			 		   AND dp.ROLE_ID = ro.ROLE_ID
1279
			 		   AND dp.DT_ID = dt.DT_ID	 
1280
			 		  -- AND ro.APP_ID = AppId 
1281
			 		   AND ur.USER_ID = UsedId 
1282
			 		   AND ro.IS_ROLE_VARIATION IS NULL
1283
			 		 GROUP BY dt.DT_ID, dp.PERM_ID
1284
			 		) yc 
1285
			  WHERE yc.DT_ID (+) = bl.DT_ID
1286
			    AND yc.PERM_ID (+) = bl.PERM_ID
1287
			UNION
1288
			(
1289
			/* Get Filter Settings for All Permission Types */ 
1290
			SELECT dt.DT_ID, dt.TABLE_NAME, dp.REF_COLUMN_VAL, dp.PERM_ID, dp.PERM_VALUE 
1291
			  FROM DATA_PERMISSIONS dp,
1292
			  	   DATA_TABLES dt,
1293
				   ROLES ro,
1294
				   USER_ROLES ur
1295
			 WHERE ur.ROLE_ID = ro.ROLE_ID
1296
			   AND dp.ROLE_ID = ro.ROLE_ID
1297
			   AND dp.DT_ID = dt.DT_ID	 
1298
			  -- AND ro.APP_ID = AppId 
1299
			   AND ur.USER_ID = UsedId
1300
			MINUS  
1301
			/* Overwrite Data Permissions using User Specific Role */
1302
			SELECT DISTINCT
1303
				   dt.DT_ID, 
1304
				   dt.TABLE_NAME,
1305
				   dp.REF_COLUMN_VAL,
1306
				   dp.PERM_ID,
1307
				   DECODE ( dp.PERM_VALUE,
1308
				   		  	'Y', 'N', 'Y' ) AS PERM_VALUE
1309
			  FROM DATA_PERMISSIONS dp,
1310
			  	   DATA_TABLES dt,
1311
				   ROLES ro,
1312
				   USER_ROLES ur
1313
			 WHERE ur.ROLE_ID = ro.ROLE_ID
1314
			   AND dp.ROLE_ID = ro.ROLE_ID
1315
			   AND dp.DT_ID = dt.DT_ID	 
1316
			 --  AND ro.APP_ID = AppId 
1317
			   AND ur.USER_ID = UsedId 
1318
			   AND ro.IS_ROLE_VARIATION = 'Y'   
1319
			)
1320
 
1321
			) qry
1322
	  WHERE dt.OBJ_ID = co.OBJ_ID
1323
		AND dt.DT_ID = qry.DT_ID;
1324
		--AND co.APP_ID = AppId;
1325
 
1326
 
1327
END;
1328
/*-------------------------------------------------------------------------------------------------------*/
1329
END PK_SECURITY;
1330
/
1331
 
1332
CREATE OR REPLACE PACKAGE BODY pk_Application
1333
IS
1334
/* ---------------------------------------------------------------------------
1335
    Version: 1.0.0
1336
   --------------------------------------------------------------------------- */
1337
 
1338
/*--------------------------------------------------------------------------------------------------*/
1339
PROCEDURE Add_Application ( sAppName IN APPLICATIONS.APPLICATION_NAME%TYPE,
1340
		  				  	sAppAcronym IN APPLICATIONS.ACRONYM%TYPE ) IS
1341
 
1342
AppId NUMBER;
1343
 
1344
CURSOR curAppAcronym IS 
1345
		SELECT app.ACRONYM
1346
		  FROM APPLICATIONS app
1347
		 WHERE app.ACRONYM = sAppAcronym;
1348
recAppAcronym curAppAcronym%ROWTYPE;
1349
 
1350
 
1351
BEGIN
1352
	/*--------------- Business Rules Here -------------------*/
1353
 
1354
	-- Check for duplicate acronyms
1355
	OPEN curAppAcronym;
1356
	FETCH curAppAcronym INTO recAppAcronym;
1357
 
1358
	IF curAppAcronym%FOUND
1359
	THEN
1360
		RAISE_APPLICATION_ERROR (-20000, 'Application Acronym <b>'|| sAppAcronym ||'</b> is already used.' );
1361
 
1362
	END IF;
1363
 
1364
	CLOSE curAppAcronym;
1365
 
1366
	/*-------------------------------------------------------*/
1367
 
1368
	/*+++++ INSERT APPLICATION ++++++++*/
1369
	BEGIN
1370
		-- Get app_id
1371
		SELECT SEQ_APP_ID.NEXTVAL INTO AppId FROM DUAL;
1372
 
1373
		-- Insert new Application
1374
		INSERT INTO APPLICATIONS ( APP_ID, APPLICATION_NAME, ACRONYM ) 
1375
		VALUES ( AppId, sAppName, sAppAcronym );
1376
 
1377
 
1378
	EXCEPTION
1379
    WHEN DUP_VAL_ON_INDEX
1380
	THEN		
1381
		RAISE_APPLICATION_ERROR (-20000, 'Application Name <b>'|| sAppName ||'</b> is already used.');
1382
	END;
1383
	/*+++++ END INSERT APPLICATION +++++*/
1384
 
1385
 
1386
END	Add_Application;
1387
/*--------------------------------------------------------------------------------------------------*/
1388
PROCEDURE Remove_Application ( nAppId IN APPLICATIONS.APP_ID%TYPE ) IS
1389
 
1390
rowCount NUMBER DEFAULT 0;
1391
 
1392
BEGIN
1393
	/*--------------- Business Rules Here -------------------*/
1394
 
1395
	-- Check if any Users are using this Application
1396
	SELECT Count(*) INTO rowCount
1397
	  FROM USER_APPLICATIONS ua
1398
	 WHERE ua.APP_ID = nAppId;
1399
 
1400
	IF rowCount > 0 THEN
1401
	   RAISE_APPLICATION_ERROR (-20000, 'Some Users are still assigned to this Application ( Counted '|| rowCount ||' ).' );
1402
	END IF; 
1403
 
1404
	-- Check if any Roles are using this Application
1405
	SELECT Count(*) INTO rowCount
1406
  	  FROM ROLES ro 
1407
	 WHERE ro.APP_ID = nAppId;
1408
 
1409
	IF rowCount > 0 THEN
1410
	   RAISE_APPLICATION_ERROR (-20000, 'Some Roles are still assigned to this Application ( Counted '|| rowCount ||' ).' );
1411
	END IF;
1412
 
1413
	/*-------------------------------------------------------*/
1414
 
1415
 
1416
	-- Remove Application --
1417
	DELETE 
1418
	  FROM APPLICATIONS
1419
	 WHERE APP_ID = nAppId;
1420
 
1421
 
1422
END	Remove_Application;
1423
/*--------------------------------------------------------------------------------------------------*/
1424
 
1425
 
1426
END pk_Application;
1427
/
1428
 
1429
CREATE OR REPLACE PACKAGE BODY pk_AMUtils
1430
IS
1431
/* ---------------------------------------------------------------------------
1432
    Version: 1.0.0
1433
   --------------------------------------------------------------------------- */
1434
 
1435
/*--------------------------------------------------------------------------------------------------*/
1436
PROCEDURE Log_Access ( nEvent IN LOGIN_TRAIL.ENUM_EVENT%TYPE,
1437
		  			   sUserName IN LOGIN_TRAIL.USER_NAME%TYPE,
1438
					   sClientIp IN LOGIN_TRAIL.CLIENT_IP%TYPE,
1439
					   nAppId IN LOGIN_TRAIL.APP_ID%TYPE,
1440
					   sComments IN LOGIN_TRAIL.COMMENTS%TYPE,
1441
					   nUserId IN NUMBER DEFAULT NULL ) IS
1442
 
1443
UserName USERS.USER_NAME%TYPE; 						 
1444
 
1445
BEGIN
1446
	/*--------------- Business Rules Here -------------------*/
1447
	IF nUserId IS NOT NULL THEN
1448
	   SELECT USER_NAME  INTO  UserName  FROM USERS  WHERE USER_ID = nUserId;
1449
	ELSE
1450
	   UserName := sUserName;
1451
	END IF;
1452
	/*-------------------------------------------------------*/
1453
 
1454
 
1455
	-- Insert Login Trail
1456
	INSERT INTO LOGIN_TRAIL ( ENUM_EVENT, USER_NAME, CLIENT_IP, APP_ID, STAMP, COMMENTS ) 
1457
	VALUES ( nEvent,
1458
		   	 UserName,
1459
			 sClientIp, 
1460
			 nAppId,
1461
			 TO_DATE( TO_CHAR( SYSDATE,'DD-MON-YYYY HH24:MI:SS' ),'DD-MON-YYYY HH24:MI:SS' ),
1462
			 sComments
1463
	   	    );
1464
 
1465
END	Log_Access;
1466
/*--------------------------------------------------------------------------------------------------*/
1467
FUNCTION Get_Hash ( sText IN VARCHAR2 ) RETURN VARCHAR2 IS
1468
 
1469
 
1470
BEGIN
1471
	/*--------------- Business Rules Here -------------------*/
1472
	/*-------------------------------------------------------*/
1473
 
1474
	RETURN DBMS_OBFUSCATION_TOOLKIT.MD5( input_string => sText );
1475
 
1476
END	Get_Hash;
1477
/*--------------------------------------------------------------------------------------------------*/
1478
 
1479
 
1480
END pk_AMUtils;
1481
/
1482
 
1483
CREATE OR REPLACE PACKAGE BODY pk_Role
1484
IS
1485
/* ---------------------------------------------------------------------------
1486
    Version: 1.0.0
1487
   --------------------------------------------------------------------------- */
1488
 
1489
/*--------------------------------------------------------------------------------------------------*/
1490
PROCEDURE Add_Role ( sRoleName IN ROLES.ROLE_NAME%TYPE,
1491
		  		   	 sRoleComments IN ROLES.COMMENTS%TYPE,
1492
				   	 nAppId IN ROLES.APP_ID%TYPE  ) IS
1493
 
1494
RoleID NUMBER;
1495
 
1496
 
1497
BEGIN
1498
	/*--------------- Business Rules Here -------------------*/
1499
	/*-------------------------------------------------------*/
1500
 
1501
 
1502
	-- Get role_id
1503
	SELECT SEQ_ROLE_ID.NEXTVAL INTO RoleID FROM DUAL;
1504
 
1505
	-- Insert new Role
1506
	INSERT INTO ROLES ( ROLE_ID, APP_ID, ROLE_NAME, IS_ROLE_VARIATION, COMMENTS ) 
1507
	VALUES ( RoleID, nAppId, sRoleName, NULL, sRoleComments );
1508
 
1509
 
1510
	EXCEPTION
1511
    WHEN DUP_VAL_ON_INDEX
1512
	THEN		
1513
		RAISE_APPLICATION_ERROR (-20000, 'Role Name '|| sRoleName ||' is already used in this Application.');
1514
 
1515
END	Add_Role;
1516
/*--------------------------------------------------------------------------------------------------*/
1517
PROCEDURE Remove_Role ( sRoleIdList IN VARCHAR2 ) IS
1518
 
1519
rowCount NUMBER DEFAULT 0;
1520
 
1521
BEGIN
1522
	/*--------------- Business Rules Here -------------------*/
1523
 
1524
	-- Check if any Users user this role
1525
	SELECT Count(*) INTO rowCount
1526
	  FROM USER_ROLES ur
1527
	 WHERE ur.ROLE_ID IN  (
1528
						   SELECT *
1529
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sRoleIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
1530
	   	   			   	   );
1531
 
1532
	IF rowCount > 0 THEN
1533
	   RAISE_APPLICATION_ERROR (-20000, 'Some Users are still using this Role ( Counted '|| rowCount ||' ).' );
1534
	END IF; 
1535
 
1536
	/*-------------------------------------------------------*/
1537
 
1538
	-- Remove Role Privileges --
1539
	DELETE 
1540
	  FROM ROLE_PRIVILEGES rp
1541
	 WHERE rp.ROLE_ID IN  (
1542
						   SELECT *
1543
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sRoleIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
1544
	   	   			   	   );
1545
 
1546
	-- Remove Role Data Permissions --
1547
	DELETE 
1548
	  FROM DATA_PERMISSIONS dp
1549
	 WHERE dp.ROLE_ID IN  (
1550
						   SELECT *
1551
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sRoleIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
1552
	   	   			   	   );
1553
 
1554
	-- Remove Role -- 
1555
	DELETE 
1556
	  FROM ROLES ro
1557
	 WHERE ro.ROLE_ID IN  (
1558
						   SELECT *
1559
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sRoleIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
1560
	   	   			   	   );
1561
 
1562
 
1563
END	Remove_Role;
1564
/*--------------------------------------------------------------------------------------------------*/
1565
PROCEDURE Set_Role_Permissions ( nRoleId IN ROLE_PRIVILEGES.ROLE_ID%TYPE,
1566
		  					   	 nObjId IN ROLE_PRIVILEGES.OBJ_ID%TYPE,
1567
							   	 cIsVisible IN ROLE_PRIVILEGES.PERM_VALUE%TYPE DEFAULT NULL,
1568
							   	 cIsActive IN ROLE_PRIVILEGES.PERM_VALUE%TYPE  DEFAULT NULL ) IS
1569
 
1570
nPermId PERMISSION_TYPES.PERM_ID%TYPE DEFAULT 0;
1571
 
1572
BEGIN
1573
	/*--------------- Business Rules Here -------------------*/
1574
	IF (nRoleId IS NULL) OR (nObjId IS NULL)
1575
	THEN
1576
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRoleId= '|| nRoleId ||', nObjId='|| nObjId );
1577
 
1578
	END IF;
1579
	/*-------------------------------------------------------*/
1580
 
1581
 
1582
	--- Set "Visible" state ----------------------------------
1583
 
1584
	-- Get PermId for "Visible"
1585
	SELECT pt.PERM_ID INTO nPermId FROM PERMISSION_TYPES pt WHERE pt.PERM_NAME = 'enumVISIBLE';
1586
 
1587
	Delete_Role_Permission ( nRoleId, nObjId, nPermId );
1588
 
1589
	IF cIsVisible IS NOT NULL THEN		
1590
 
1591
		INSERT INTO ROLE_PRIVILEGES ( ROLE_ID, OBJ_ID, PERM_ID, PERM_VALUE )
1592
		VALUES ( nRoleId, nObjId, nPermId, cIsVisible );
1593
 
1594
	ELSE
1595
		IF cIsActive IS NOT NULL THEN
1596
		   -- If "Active" is Set then "Visible" must be "SHOW=Y"
1597
 
1598
		   INSERT INTO ROLE_PRIVILEGES ( ROLE_ID, OBJ_ID, PERM_ID, PERM_VALUE )
1599
		   VALUES ( nRoleId, nObjId, nPermId, 'Y' );
1600
 
1601
		END IF;
1602
 
1603
	END IF;
1604
 
1605
 
1606
 
1607
	--- Set "Active" state ----------------------------------
1608
 
1609
	-- Get PermId for "Visible"
1610
	SELECT pt.PERM_ID INTO nPermId FROM PERMISSION_TYPES pt WHERE pt.PERM_NAME = 'enumACTIVE';
1611
 
1612
	Delete_Role_Permission ( nRoleId, nObjId, nPermId );
1613
 
1614
	IF ( cIsActive IS NOT NULL ) AND ( cIsVisible <> 'N') THEN		
1615
 
1616
		INSERT INTO ROLE_PRIVILEGES ( ROLE_ID, OBJ_ID, PERM_ID, PERM_VALUE )
1617
		VALUES ( nRoleId, nObjId, nPermId, cIsActive );
1618
 
1619
	END IF;
1620
 
1621
 
1622
END	Set_Role_Permissions;
1623
/*--------------------------------------------------------------------------------------------------*/
1624
PROCEDURE Set_Role_Variation_Permissions ( nUserId IN USER_ROLES.USER_ID%TYPE,
1625
		  								   nAppId IN ROLES.APP_ID%TYPE,
1626
										   nRoleId IN ROLES.ROLE_ID%TYPE,
1627
		  								   nObjId IN ROLE_PRIVILEGES.OBJ_ID%TYPE,
1628
									   	   cIsVisible IN ROLE_PRIVILEGES.PERM_VALUE%TYPE DEFAULT NULL,
1629
									   	   cIsActive IN ROLE_PRIVILEGES.PERM_VALUE%TYPE  DEFAULT NULL ) IS
1630
 
1631
nPermId 		    PERMISSION_TYPES.PERM_ID%TYPE DEFAULT 0;
1632
nRoleVariationId    ROLES.ROLE_ID%TYPE DEFAULT NULL;
1633
sUserName           USERS.USER_NAME%TYPE;
1634
nDataPermCount      NUMBER;
1635
nRolePermCount      NUMBER;
1636
 
1637
--- Get Role Variation Id ---
1638
CURSOR curRoleVariation IS 
1639
		SELECT ro.ROLE_ID
1640
		  FROM USER_ROLES ur,
1641
		  	   ROLES ro
1642
		 WHERE ur.ROLE_ID = ro.ROLE_ID
1643
		   AND ro.IS_ROLE_VARIATION = 'Y'
1644
		   AND ur.USER_ID = nUserId;
1645
recRoleVariation curRoleVariation%ROWTYPE;
1646
 
1647
 
1648
BEGIN
1649
	/*--------------- Business Rules Here -------------------*/
1650
	IF (nUserId IS NULL) OR (nAppId IS NULL) OR (nObjId IS NULL)
1651
	THEN
1652
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nUserId='|| nUserId ||', nAppId='|| nAppId ||', nObjId='|| nObjId);
1653
 
1654
	END IF;
1655
	/*-------------------------------------------------------*/
1656
 
1657
	IF Is_Permissions_Changed( nRoleId, nObjId, cIsVisible, cIsActive ) THEN
1658
 
1659
	   IF Is_Role_Variation ( nRoleId ) THEN
1660
			--- Set this user role permissions ---
1661
			Set_Role_Permissions ( nRoleId, nObjId, cIsVisible, cIsActive );
1662
 
1663
 
1664
 
1665
			--- Remove this user role for no permission settings ---
1666
			-- Get Role Permissions Count
1667
			SELECT Count(*) INTO nRolePermCount  FROM ROLE_PRIVILEGES rp WHERE rp.ROLE_ID = nRoleVariationId;
1668
 
1669
			-- Get Role Permissions Count
1670
			SELECT Count(*) INTO nDataPermCount  FROM DATA_PERMISSIONS dp WHERE dp.ROLE_ID = nRoleVariationId;
1671
 
1672
 
1673
			IF (nRolePermCount = 0) AND (nDataPermCount = 0) THEN
1674
				-- There are no permission settings, hence proceed to remove this user role
1675
				DELETE
1676
				  FROM ROLES ro
1677
				 WHERE ro.ROLE_ID = nRoleVariationId;
1678
 
1679
			END IF;
1680
 
1681
 
1682
	   ELSE
1683
	   	    --- Get Role Variation Id ---
1684
			OPEN curRoleVariation;
1685
			FETCH curRoleVariation INTO recRoleVariation;
1686
 
1687
			IF curRoleVariation%FOUND THEN
1688
			   nRoleVariationId := recRoleVariation.ROLE_ID;
1689
			END IF;
1690
 
1691
			CLOSE curRoleVariation;
1692
 
1693
 
1694
 
1695
			--- Create Role Variation if does not exist ---
1696
			IF nRoleVariationId IS NULL THEN
1697
 
1698
			   -- Get role_id
1699
			   SELECT SEQ_ROLE_ID.NEXTVAL INTO nRoleVariationId FROM DUAL;
1700
 
1701
			   -- Get user_name
1702
			   SELECT usr.USER_NAME INTO sUserName FROM USERS usr WHERE usr.USER_ID = nUserId;
1703
 
1704
			   -- Create Role Variation
1705
			   INSERT INTO ROLES ( ROLE_ID, APP_ID, ROLE_NAME, IS_ROLE_VARIATION, COMMENTS )
1706
			   VALUES ( nRoleVariationId, nAppId, UPPER( sUserName ) || '_SPECIFIC', 'Y', 'Auto-created role to define user specific permissions.');
1707
 
1708
			   -- Link this role to user
1709
			   INSERT INTO USER_ROLES ( USER_ID, ROLE_ID )
1710
			   VALUES ( nUserId, nRoleVariationId );
1711
 
1712
 
1713
			END IF;
1714
 
1715
 
1716
			--- Set this user role permissions ---
1717
		    Set_Role_Permissions ( nRoleVariationId, nObjId, cIsVisible, cIsActive );
1718
 
1719
	   END IF;
1720
 
1721
	END IF;
1722
 
1723
 
1724
END	Set_Role_Variation_Permissions;
1725
/*--------------------------------------------------------------------------------------------------*/
1726
FUNCTION Is_Permissions_Changed ( nRoleId IN ROLE_PRIVILEGES.ROLE_ID%TYPE,
1727
  								  nObjId IN ROLE_PRIVILEGES.OBJ_ID%TYPE,
1728
							   	  cIsVisible IN ROLE_PRIVILEGES.PERM_VALUE%TYPE,
1729
							   	  cIsActive IN ROLE_PRIVILEGES.PERM_VALUE%TYPE ) RETURN BOOLEAN IS
1730
 
1731
ReturnValue       BOOLEAN DEFAULT FALSE;								  
1732
cCurrentIsVisible ROLE_PRIVILEGES.PERM_VALUE%TYPE;
1733
cCurrentIsActive  ROLE_PRIVILEGES.PERM_VALUE%TYPE;
1734
 
1735
CURSOR curCurrentIsVisible IS 
1736
		SELECT rp.PERM_VALUE
1737
		  FROM ROLE_PRIVILEGES rp
1738
		 WHERE rp.ROLE_ID = nRoleId
1739
		   AND rp.OBJ_ID = nObjId
1740
		   AND rp.PERM_ID = 1;
1741
recCurrentIsVisible curCurrentIsVisible%ROWTYPE;
1742
 
1743
CURSOR curCurrentIsActive IS 
1744
		SELECT rp.PERM_VALUE
1745
		  FROM ROLE_PRIVILEGES rp
1746
		 WHERE rp.ROLE_ID = nRoleId
1747
		   AND rp.OBJ_ID = nObjId
1748
		   AND rp.PERM_ID = 2;
1749
recCurrentIsActive curCurrentIsActive%ROWTYPE;
1750
 
1751
BEGIN
1752
	/*--------------- Business Rules Here -------------------*/
1753
	/*-------------------------------------------------------*/
1754
 
1755
 
1756
	-- Get "Visible" Permission
1757
	OPEN curCurrentIsVisible;
1758
	FETCH curCurrentIsVisible INTO recCurrentIsVisible; 
1759
 
1760
	IF curCurrentIsVisible%FOUND THEN
1761
	   cCurrentIsVisible := recCurrentIsVisible.PERM_VALUE;
1762
	END IF;
1763
 
1764
	CLOSE curCurrentIsVisible;
1765
 
1766
 
1767
 
1768
	-- Get "Active" Permission
1769
	OPEN curCurrentIsActive;
1770
	FETCH curCurrentIsActive INTO recCurrentIsActive;
1771
 
1772
	IF curCurrentIsActive%FOUND THEN
1773
	   cCurrentIsActive := recCurrentIsActive.PERM_VALUE;
1774
	END IF;
1775
 
1776
	CLOSE curCurrentIsActive;   
1777
 
1778
 
1779
 
1780
	--- Compare --- 
1781
	IF NOT Is_Same_String ( cCurrentIsVisible, cIsVisible )  OR  NOT Is_Same_String ( cCurrentIsActive, cIsActive )  THEN
1782
	   ReturnValue := TRUE;
1783
 
1784
	END IF;
1785
 
1786
 
1787
 
1788
	RETURN ReturnValue;
1789
END	Is_Permissions_Changed;
1790
/*--------------------------------------------------------------------------------------------------*/
1791
FUNCTION Is_Role_Variation ( nRoleId IN ROLES.ROLE_ID%TYPE ) RETURN BOOLEAN IS
1792
 
1793
ReturnValue 	 BOOLEAN DEFAULT FALSE;	
1794
cIsRoleVariation CHAR;							  
1795
 
1796
BEGIN
1797
	/*--------------- Business Rules Here -------------------*/
1798
	/*-------------------------------------------------------*/
1799
 
1800
	-- Get is_role_variation
1801
	SELECT ro.IS_ROLE_VARIATION INTO cIsRoleVariation
1802
	  FROM ROLES ro
1803
	 WHERE ro.ROLE_ID = nRoleId;
1804
 
1805
	IF cIsRoleVariation IS NOT NULL THEN
1806
	   ReturnValue := TRUE;
1807
	END IF; 
1808
 
1809
	RETURN ReturnValue;
1810
END	Is_Role_Variation;
1811
/*--------------------------------------------------------------------------------------------------*/
1812
PROCEDURE Delete_Role_Permission ( nRoleId IN ROLE_PRIVILEGES.ROLE_ID%TYPE,
1813
		  						  nObjId IN ROLE_PRIVILEGES.OBJ_ID%TYPE,
1814
								  nPermId IN ROLE_PRIVILEGES.PERM_ID%TYPE ) IS
1815
 
1816
 
1817
BEGIN
1818
	/*--------------- Business Rules Here -------------------*/
1819
	IF (nRoleId IS NULL) OR (nObjId IS NULL) OR (nPermId IS NULL)
1820
	THEN
1821
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nRoleId= '|| nRoleId ||', nObjId='|| nObjId ||', nPermId='|| nPermId );
1822
 
1823
	END IF;
1824
	/*-------------------------------------------------------*/
1825
 
1826
	DELETE
1827
	  FROM ROLE_PRIVILEGES rp
1828
	 WHERE rp.ROLE_ID = nRoleId
1829
	   AND rp.OBJ_ID = nObjId
1830
	   AND rp.PERM_ID = nPermId;
1831
 
1832
 
1833
END	Delete_Role_Permission;
1834
/*--------------------------------------------------------------------------------------------------*/
1835
PROCEDURE Grant_Role ( sRoleIdList IN VARCHAR2,
1836
		  			   nUserId IN USER_ROLES.USER_ID%TYPE ) IS
1837
 
1838
 
1839
BEGIN
1840
	/*--------------- Business Rules Here -------------------*/
1841
	IF sRoleIdList IS NULL THEN
1842
	   RAISE_APPLICATION_ERROR (-20000, 'Please select at least one role.' );
1843
	END IF;
1844
	/*-------------------------------------------------------*/
1845
 
1846
	--- Grant Role(s) ---
1847
	INSERT INTO USER_ROLES ( USER_ID, ROLE_ID )
1848
	SELECT nUserId, qry.ROLE_ID
1849
	  FROM (
1850
			SELECT ro.ROLE_ID
1851
			  FROM ROLES ro
1852
			 WHERE ro.ROLE_ID IN (
1853
			 	   			  	  SELECT *
1854
							   	    FROM THE ( SELECT CAST( IN_LIST_NUMBER( sRoleIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
1855
			   	   			   	  )
1856
			MINUS 
1857
			SELECT ur.ROLE_ID
1858
			  FROM USER_ROLES ur
1859
			 WHERE ur.USER_ID = nUserId
1860
	  	   ) qry;
1861
 
1862
 
1863
END	Grant_Role;
1864
/*--------------------------------------------------------------------------------------------------*/
1865
PROCEDURE Revoke_Role ( sRoleIdList IN VARCHAR2,
1866
		  			    nUserId IN USER_ROLES.USER_ID%TYPE ) IS
1867
 
1868
 
1869
BEGIN
1870
	/*--------------- Business Rules Here -------------------*/
1871
	IF sRoleIdList IS NULL THEN
1872
	   RAISE_APPLICATION_ERROR (-20000, 'Please select at least one role.' );
1873
	END IF;
1874
	/*-------------------------------------------------------*/
1875
 
1876
	--- Revoke Role(s) ---
1877
	DELETE
1878
	  FROM USER_ROLES ur
1879
	 WHERE ur.USER_ID = nUserId
1880
	   AND ur.ROLE_ID IN (
1881
	 	   			  	  SELECT *
1882
					   	    FROM THE ( SELECT CAST( IN_LIST_NUMBER( sRoleIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
1883
	   	   			   	  );
1884
 
1885
 
1886
END	Revoke_Role;
1887
/*--------------------------------------------------------------------------------------------------*/
1888
 
1889
 
1890
END pk_Role;
1891
/
1892
 
1893
CREATE OR REPLACE PACKAGE BODY pk_user IS
1894
/*
1895
------------------------------
1896
||  Last Modified:  J.Tweddle
1897
||  Modified Date:  21/Jan/2008  
1898
||  Body Version:   2.1
1899
------------------------------
1900
*/
1901
 
1902
/*--------------------------------------------------------------------------------------------------*/
1903
PROCEDURE Add_User_Account ( sFullName IN USERS.FULL_NAME%TYPE,
1904
		  		   	 	   	 sUserName IN USERS.USER_NAME%TYPE,
1905
							 sUserEmail IN USERS.USER_EMAIL%TYPE,
1906
							 sDomain IN USERS.DOMAIN%TYPE   ) IS
1907
 
1908
UserId NUMBER;
1909
 
1910
 
1911
BEGIN
1912
	/*--------------- Business Rules Here -------------------*/
1913
	/*-------------------------------------------------------*/
1914
 
1915
 
1916
	-- Get user_id
1917
	SELECT SEQ_USER_ID.NEXTVAL INTO UserId FROM DUAL;
1918
 
1919
	-- Insert new User Account
1920
	INSERT INTO USERS (USER_ID, FULL_NAME, USER_NAME, USER_EMAIL, DOMAIN )
1921
	VALUES( UserId, sFullName, sUserName, sUserEmail, sDomain );
1922
 
1923
 
1924
	EXCEPTION
1925
        WHEN DUP_VAL_ON_INDEX
1926
	THEN		
1927
		RAISE_APPLICATION_ERROR (-20000, 'User Name '|| sUserName ||' already exists.');
1928
 
1929
END     Add_User_Account;
1930
 
1931
/*--------------------------------------------------------------------------------------------------*/
1932
PROCEDURE Update_User_Account ( sUserId IN VARCHAR2, sFullName IN USERS.FULL_NAME%TYPE,
1933
		  		   	 	   	 sUserName IN USERS.USER_NAME%TYPE,
1934
							 sUserEmail IN USERS.USER_EMAIL%TYPE,
1935
							 sDomain IN USERS.DOMAIN%TYPE   ) IS
1936
 
1937
BEGIN
1938
	/*--------------- Business Rules Here -------------------*/
1939
	IF (sUserId IS NULL) THEN
1940
	   RAISE_APPLICATION_ERROR (-20000, 'Please select a User Account.' );
1941
	END IF;
1942
	/*-------------------------------------------------------*/
1943
 
1944
        -- Update User Account
1945
	UPDATE USERS usr SET
1946
	usr.FULL_NAME = sFullName, usr.USER_NAME = sUserName, usr.USER_EMAIL = sUserEmail, usr.DOMAIN = sDomain
1947
	WHERE usr.USER_ID = sUserId;
1948
 
1949
END     Update_User_Account;
1950
 
1951
/*--------------------------------------------------------------------------------------------------*/
1952
PROCEDURE Add_Application_User ( sUserIdList IN VARCHAR2,
1953
		  					   	 nAppId IN USER_APPLICATIONS.APP_ID%TYPE,
1954
								 cIncludeEveryone IN CHAR ) IS
1955
 
1956
 
1957
BEGIN
1958
	/*--------------- Business Rules Here -------------------*/
1959
	IF (sUserIdList IS NULL) AND (cIncludeEveryone IS NULL) THEN
1960
	   RAISE_APPLICATION_ERROR (-20000, 'Please select at least one User.' );
1961
	END IF;
1962
	/*-------------------------------------------------------*/
1963
 
1964
	-- Insert Application User --
1965
 
1966
	IF cIncludeEveryone = 'Y' THEN
1967
	    -- Insert All Users
1968
		INSERT INTO USER_APPLICATIONS ( USER_ID, APP_ID )
1969
		SELECT qry.USER_ID, nAppId
1970
		  FROM (
1971
				SELECT usr.USER_ID
1972
				  FROM USERS usr 
1973
				MINUS
1974
				SELECT ua.USER_ID
1975
				  FROM USER_APPLICATIONS ua
1976
				 WHERE ua.APP_ID = nAppId
1977
		  	   ) qry;
1978
 
1979
	ELSE
1980
		-- Insert specific user list
1981
		INSERT INTO USER_APPLICATIONS ( USER_ID, APP_ID )
1982
		SELECT qry.USER_ID, nAppId
1983
		  FROM (
1984
		  	   	SELECT usr.USER_ID
1985
				  FROM USERS usr
1986
				 WHERE usr.USER_ID IN (
1987
				 	   			  	  SELECT *
1988
								   	    FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
1989
				   	   			   	  )
1990
		  	    MINUS
1991
				SELECT ua.USER_ID
1992
				  FROM USER_APPLICATIONS ua
1993
				 WHERE ua.APP_ID = nAppId
1994
				   AND ua.USER_ID IN (
1995
				 	   			  	  SELECT *
1996
								   	    FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
1997
				   	   			   	  )
1998
		  	   ) qry;
1999
 
2000
	END IF;
2001
 
2002
 
2003
	--- Make sure Build in User is not included ---
2004
	Remove_Application_User ( '0', nAppId );
2005
 
2006
 
2007
END	Add_Application_User;
2008
 
2009
/*--------------------------------------------------------------------------------------------------*/
2010
PROCEDURE Remove_Application_User ( sUserIdList IN VARCHAR2,
2011
		  					   	  	nAppId IN USER_APPLICATIONS.APP_ID%TYPE,
2012
									cIncludeEveryone IN CHAR DEFAULT NULL) IS
2013
 
2014
 
2015
BEGIN
2016
	/*--------------- Business Rules Here -------------------*/
2017
	IF (sUserIdList IS NULL) AND (cIncludeEveryone IS NULL) THEN
2018
	   RAISE_APPLICATION_ERROR (-20000, 'Please select at least one User.' );
2019
	END IF;
2020
	/*-------------------------------------------------------*/
2021
 
2022
	IF cIncludeEveryone = 'Y' THEN
2023
	   	-- Remove All Users --
2024
		DELETE
2025
		  FROM user_applications ua
2026
		 WHERE ua.app_id = nAppId;
2027
 
2028
	ELSE
2029
		-- Remove Application Users --
2030
		DELETE
2031
		  FROM user_applications ua
2032
		 WHERE ua.app_id = nAppId
2033
		   AND ua.user_id IN (
2034
                       SELECT *
2035
                         FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual )
2036
                       );
2037
                -- Remove User(s) Application Roles --
2038
                DELETE
2039
                  FROM user_roles ur
2040
                 WHERE ur.user_id IN (
2041
                       SELECT *
2042
                         FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual )
2043
                       )
2044
                   AND ur.role_id IN (
2045
                       SELECT ro.role_id
2046
                         FROM roles ro
2047
                        WHERE ro.app_id = nAppId
2048
                       );
2049
	END IF;
2050
 
2051
 
2052
END	Remove_Application_User;
2053
 
2054
/*--------------------------------------------------------------------------------------------------*/
2055
PROCEDURE Add_Role_Member ( sUserIdList IN VARCHAR2,
2056
		  					nRoleId IN USER_ROLES.ROLE_ID%TYPE,
2057
							cIncludeEveryone IN CHAR ) IS
2058
 
2059
 
2060
BEGIN
2061
	/*--------------- Business Rules Here -------------------*/
2062
	IF (sUserIdList IS NULL) AND (cIncludeEveryone IS NULL) THEN
2063
	   RAISE_APPLICATION_ERROR (-20000, 'Please select at least one User.' );
2064
	END IF;
2065
	/*-------------------------------------------------------*/
2066
 
2067
	-- Insert Role Member --
2068
 
2069
	IF cIncludeEveryone = 'Y' THEN
2070
	    -- Insert All Users
2071
		INSERT INTO USER_ROLES ( USER_ID, ROLE_ID )
2072
		SELECT qry.USER_ID, nRoleId
2073
		  FROM (
2074
				SELECT usr.USER_ID
2075
				  FROM USERS usr 
2076
				MINUS
2077
				SELECT ur.USER_ID
2078
				  FROM USER_ROLES ur
2079
				 WHERE ur.ROLE_ID = nRoleId
2080
		  	   ) qry;
2081
 
2082
	ELSE
2083
		-- Insert specific user list
2084
		INSERT INTO USER_ROLES ( USER_ID, ROLE_ID )
2085
		SELECT qry.USER_ID, nRoleId
2086
		  FROM (
2087
		  	   	SELECT usr.USER_ID
2088
				  FROM USERS usr
2089
				 WHERE usr.USER_ID IN (
2090
				 	   			  	  SELECT *
2091
								   	    FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
2092
				   	   			   	  )
2093
		  	    MINUS
2094
				SELECT ur.USER_ID
2095
				  FROM USER_ROLES ur
2096
				 WHERE ur.ROLE_ID = nRoleId
2097
				   AND ur.USER_ID IN (
2098
				 	   			  	  SELECT *
2099
								   	    FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
2100
				   	   			   	  )
2101
		  	   ) qry;
2102
 
2103
	END IF;
2104
 
2105
 
2106
	--- Make sure Build in User is not included ---
2107
	Remove_Role_Member ( '0', nRoleId );
2108
 
2109
 
2110
END	Add_Role_Member;
2111
 
2112
/*--------------------------------------------------------------------------------------------------*/
2113
PROCEDURE Remove_Role_Member ( sUserIdList IN VARCHAR2,
2114
		  					   nRoleId IN USER_ROLES.ROLE_ID%TYPE,
2115
							   cIncludeEveryone IN CHAR DEFAULT NULL) IS
2116
 
2117
 
2118
BEGIN
2119
	/*--------------- Business Rules Here -------------------*/
2120
	IF (nRoleId IS NULL) THEN
2121
		RAISE_APPLICATION_ERROR (-20000, 'RoleId is missing.' );
2122
	END IF;
2123
 
2124
	IF (sUserIdList IS NULL) AND (cIncludeEveryone IS NULL) THEN
2125
	   RAISE_APPLICATION_ERROR (-20000, 'Please select at least one User.' );
2126
	END IF;
2127
	/*-------------------------------------------------------*/
2128
 
2129
	IF cIncludeEveryone = 'Y' THEN
2130
	   	-- Remove All Users --
2131
		DELETE
2132
		  FROM USER_ROLES ur
2133
		 WHERE ur.ROLE_ID = nRoleId;
2134
 
2135
	ELSE
2136
		-- Remove Application Users --
2137
		DELETE
2138
		  FROM USER_ROLES ur
2139
		 WHERE ur.ROLE_ID = nRoleId
2140
		   AND ur.USER_ID IN (
2141
		 	   			  	  SELECT *
2142
						   	    FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
2143
		   	   			   	  );		
2144
	END IF;
2145
 
2146
 
2147
END	Remove_Role_Member;
2148
 
2149
/*--------------------------------------------------------------------------------------------------*/
2150
PROCEDURE Disable_Users ( sUserIdList IN VARCHAR2,
2151
 					   	  nAppId IN USER_APPLICATIONS.APP_ID%TYPE ) IS
2152
 
2153
 
2154
BEGIN
2155
	/*--------------- Business Rules Here -------------------*/
2156
	IF (sUserIdList IS NULL) THEN
2157
	   RAISE_APPLICATION_ERROR (-20000, 'Please select at least one User.' );
2158
	END IF;
2159
	/*-------------------------------------------------------*/
2160
 
2161
 
2162
	-- Disable User Accounts
2163
	UPDATE USERS usr SET
2164
	usr.IS_DISABLED = 'Y'
2165
	WHERE usr.USER_ID IN (
2166
		 	   			   SELECT *
2167
						     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
2168
		   	   			  );	
2169
 
2170
END	Disable_Users;
2171
 
2172
/*--------------------------------------------------------------------------------------------------*/
2173
PROCEDURE Remove_User_Account ( sUserIdList IN VARCHAR2 ) IS
2174
 
2175
rowCount NUMBER DEFAULT 0;
2176
 
2177
BEGIN
2178
	/*--------------- Business Rules Here -------------------*/
2179
 
2180
	IF (sUserIdList IS NULL) THEN
2181
	   RAISE_APPLICATION_ERROR (-20000, 'Please select at least one User Account.' );
2182
	END IF;
2183
 
2184
 
2185
	-- Check if any Users have any roles
2186
	SELECT Count(*) INTO rowCount
2187
	  FROM USER_ROLES ur
2188
	 WHERE ur.USER_ID IN  (
2189
						   SELECT *
2190
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
2191
	   	   			   	   );
2192
 
2193
	IF rowCount > 0 THEN
2194
	   RAISE_APPLICATION_ERROR (-20000, 'Some Users still have Roles assigned. ( Counted '|| rowCount ||' ).' );
2195
	END IF; 
2196
 
2197
	/*-------------------------------------------------------*/
2198
 
2199
	-- Remove User Applications --
2200
	DELETE 
2201
	  FROM USER_APPLICATIONS ua
2202
	 WHERE ua.USER_ID IN  (
2203
						   SELECT *
2204
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
2205
	   	   			   	   );
2206
 
2207
	-- Remove User -- 
2208
	DELETE 
2209
	  FROM USERS us
2210
	 WHERE us.USER_ID IN  (
2211
						   SELECT *
2212
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sUserIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
2213
	   	   			   	   );
2214
 
2215
 
2216
END	Remove_User_Account;
2217
/*--------------------------------------------------------------------------------------------------*/
2218
END pk_user;
2219
/
2220
 
2221
CREATE OR REPLACE PACKAGE BODY pk_Control
2222
IS
2223
/* ---------------------------------------------------------------------------
2224
    Version: 1.0.0
2225
   --------------------------------------------------------------------------- */
2226
 
2227
/*--------------------------------------------------------------------------------------------------*/
2228
PROCEDURE Add_Control ( sObjName IN CONTROL_OBJECTS.OBJ_NAME%TYPE,
2229
		  		   	  	sObjDescription IN CONTROL_OBJECTS.OBJ_DESCRIPTION%TYPE,
2230
					 	nAppId IN CONTROL_OBJECTS.APP_ID%TYPE
2231
		  		   	 	) IS
2232
 
2233
ObjID NUMBER;
2234
 
2235
CURSOR curPermissionTypes IS 
2236
		SELECT pt.PERM_ID
2237
  		  FROM PERMISSION_TYPES pt;
2238
recPermissionTypes curPermissionTypes%ROWTYPE;
2239
 
2240
 
2241
BEGIN
2242
	/*--------------- Business Rules Here -------------------*/
2243
	/*-------------------------------------------------------*/
2244
 
2245
	-- Get obj_id
2246
	SELECT SEQ_OBJ_ID.NEXTVAL INTO ObjID FROM DUAL;
2247
 
2248
	-- Insert new Control Object
2249
	INSERT INTO CONTROL_OBJECTS ( OBJ_ID, APP_ID, OBJ_NAME, PARENT_OBJ_ID, OBJ_DESCRIPTION ) 
2250
	VALUES ( ObjID, nAppId, sObjName, NULL, sObjDescription );
2251
 
2252
 
2253
 
2254
 
2255
	/* Set default permissions to all roles */
2256
 
2257
	/*
2258
	OPEN curPermissionTypes;
2259
	FETCH curPermissionTypes INTO recPermissionTypes;
2260
 
2261
	WHILE curPermissionTypes%FOUND
2262
	LOOP
2263
		INSERT INTO ROLE_PRIVILEGES ( ROLE_ID, OBJ_ID, PERM_ID, PERM_VALUE )
2264
		SELECT ROLE_ID, 
2265
			   ObjID AS OBJ_ID, 
2266
			   recPermissionTypes.PERM_ID AS PERM_ID, 
2267
			   'Y' AS PERM_VALUE
2268
		  FROM ROLES
2269
		 WHERE IS_ROLE_VARIATION != 'Y';
2270
 
2271
 
2272
		FETCH curPermissionTypes INTO recPermissionTypes;
2273
	END LOOP;
2274
	CLOSE curPermissionTypes;
2275
	*/
2276
 
2277
	EXCEPTION
2278
    WHEN DUP_VAL_ON_INDEX
2279
	THEN		
2280
		RAISE_APPLICATION_ERROR (-20000, 'Control Name '|| sObjName ||' is already used in this Application.');
2281
 
2282
 
2283
END	Add_Control;
2284
/*--------------------------------------------------------------------------------------------------*/
2285
PROCEDURE Remove_Control ( sObjIdList IN VARCHAR2 ) IS
2286
 
2287
rowCount NUMBER DEFAULT 0;
2288
 
2289
BEGIN
2290
	/*--------------- Business Rules Here -------------------*/
2291
 
2292
	-- Check if any Pages use this control
2293
	SELECT Count(*) INTO rowCount
2294
	  FROM PAGE_CONTROL_OBJECTS pco
2295
	 WHERE pco.OBJ_ID IN  (
2296
						   SELECT *
2297
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sObjIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
2298
	   	   			   	   );
2299
 
2300
	IF rowCount > 0 THEN
2301
	   RAISE_APPLICATION_ERROR (-20000, 'Some Pages are still using this Control ( Counted '|| rowCount ||' ).' );
2302
	END IF; 
2303
 
2304
 
2305
	-- Check if any Roles use this control
2306
	SELECT Count(*) INTO rowCount
2307
  	  FROM ROLE_PRIVILEGES rp 
2308
	 WHERE rp.OBJ_ID IN (
2309
						   SELECT *
2310
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sObjIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
2311
	   	   			   	   );
2312
 
2313
	IF rowCount > 0 THEN
2314
	   RAISE_APPLICATION_ERROR (-20000, 'Some Roles are still using this Control ( Counted '|| rowCount ||' ).' );
2315
	END IF;
2316
 
2317
 
2318
	-- Check if any Data tables use this control
2319
	SELECT Count(*) INTO rowCount
2320
	  FROM DATA_TABLES dt,
2321
	  	   DATA_PERMISSIONS dp 
2322
	 WHERE dt.OBJ_ID IN   (
2323
						   SELECT *
2324
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sObjIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
2325
	   	   			   	   )
2326
	   AND dt.DT_ID = dp.DT_ID;
2327
 
2328
	IF rowCount > 0 THEN
2329
	   RAISE_APPLICATION_ERROR (-20000, 'Some Data Filters are still in use by Roles ( Counted '|| rowCount ||' ).' );
2330
	END IF;
2331
 
2332
	/*-------------------------------------------------------*/
2333
 
2334
 
2335
	-- Remove Data Filter --
2336
	DELETE 
2337
	  FROM DATA_TABLES dt
2338
	 WHERE dt.OBJ_ID IN   (
2339
						   SELECT *
2340
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sObjIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
2341
	   	   			   	   );
2342
 
2343
	-- Remove Control -- 
2344
	DELETE 
2345
	  FROM CONTROL_OBJECTS co
2346
	 WHERE co.OBJ_ID IN   (
2347
						   SELECT *
2348
					   	     FROM THE ( SELECT CAST( IN_LIST_NUMBER( sObjIdList ) AS ACCMGR_NUMBER_TAB_t ) FROM dual ) 
2349
	   	   			   	   );
2350
 
2351
 
2352
END	Remove_Control;
2353
/*--------------------------------------------------------------------------------------------------*/
2354
PROCEDURE Add_DataTable ( nObjId IN DATA_TABLES.OBJ_ID%TYPE,
2355
						  sTableName IN DATA_TABLES.TABLE_NAME%TYPE,
2356
						  sRefColumn IN DATA_TABLES.REF_COLUMN_NAME%TYPE,
2357
						  sDisplayColumn IN DATA_TABLES.DISPLAY_COLUMN_NAME%TYPE
2358
		  		   	 	) IS
2359
 
2360
DtID NUMBER;
2361
 
2362
 
2363
BEGIN
2364
	/*--------------- Business Rules Here -------------------*/
2365
	/*-------------------------------------------------------*/
2366
 
2367
	-- Get dt_id
2368
	SELECT SEQ_DT_ID.NEXTVAL INTO DtID FROM DUAL;
2369
 
2370
	-- Insert new Control Object
2371
	INSERT INTO DATA_TABLES ( DT_ID, OBJ_ID, TABLE_NAME, REF_COLUMN_NAME, DISPLAY_COLUMN_NAME )
2372
	VALUES ( DtID, nObjId, sTableName, sRefColumn, sDisplayColumn );
2373
 
2374
 
2375
	EXCEPTION
2376
    WHEN DUP_VAL_ON_INDEX
2377
	THEN		
2378
		RAISE_APPLICATION_ERROR (-20000, 'This Data Table Reference is already used in this Action object.');
2379
 
2380
 
2381
END	Add_DataTable;
2382
/*--------------------------------------------------------------------------------------------------*/
2383
PROCEDURE Remove_DataTable ( DtId IN NUMBER ) IS
2384
 
2385
 
2386
BEGIN
2387
	/*--------------- Business Rules Here -------------------*/
2388
 
2389
	/*-------------------------------------------------------*/
2390
 
2391
 
2392
	-- Remove Data Permissions --
2393
	DELETE 
2394
	  FROM DATA_PERMISSIONS dp
2395
	 WHERE dp.DT_ID = DtId;
2396
 
2397
	-- Remove Data Table -- 
2398
	DELETE 
2399
	  FROM DATA_TABLES dt
2400
	 WHERE dt.DT_ID = DtId;
2401
 
2402
 
2403
END	Remove_DataTable;
2404
/*--------------------------------------------------------------------------------------------------*/
2405
PROCEDURE Set_Row_Permissions ( nDtId IN DATA_PERMISSIONS.DT_ID%TYPE,
2406
							  	nRoleId IN DATA_PERMISSIONS.ROLE_ID%TYPE,
2407
							 	nRefCol IN DATA_PERMISSIONS.REF_COLUMN_VAL%TYPE,
2408
						     	cIsVisible IN DATA_PERMISSIONS.PERM_VALUE%TYPE DEFAULT NULL,
2409
						     	cIsActive IN DATA_PERMISSIONS.PERM_VALUE%TYPE  DEFAULT NULL ) IS
2410
 
2411
nPermId PERMISSION_TYPES.PERM_ID%TYPE DEFAULT 0;
2412
 
2413
BEGIN
2414
	/*--------------- Business Rules Here -------------------*/
2415
	/*-------------------------------------------------------*/
2416
 
2417
	-- Delete Existing Permission --
2418
	Delete_Data_Permission ( nDtId, nRoleId, nRefCol );
2419
 
2420
 
2421
	----- Set Data Permission -----
2422
 
2423
	-- Get PermId for "Visible"
2424
	SELECT pt.PERM_ID INTO nPermId FROM PERMISSION_TYPES pt WHERE pt.PERM_NAME = 'enumVISIBLE';
2425
 
2426
 
2427
 
2428
	IF (cIsVisible IS NOT NULL) THEN
2429
 
2430
	   INSERT INTO DATA_PERMISSIONS ( DT_ID, ROLE_ID, REF_COLUMN_VAL, PERM_ID, PERM_VALUE )
2431
	   VALUES ( nDtId, nRoleId, nRefCol, nPermId, cIsVisible );
2432
 
2433
	END IF;
2434
 
2435
 
2436
 
2437
	-- Get PermId for "Active"
2438
	SELECT pt.PERM_ID INTO nPermId FROM PERMISSION_TYPES pt WHERE pt.PERM_NAME = 'enumACTIVE';
2439
 
2440
 
2441
 
2442
	IF (cIsActive IS NOT NULL) THEN
2443
 
2444
	   INSERT INTO DATA_PERMISSIONS ( DT_ID, ROLE_ID, REF_COLUMN_VAL, PERM_ID, PERM_VALUE )
2445
	   VALUES ( nDtId, nRoleId, nRefCol, nPermId, cIsActive );
2446
 
2447
	END IF;
2448
 
2449
 
2450
 
2451
END	Set_Row_Permissions;
2452
/*--------------------------------------------------------------------------------------------------*/
2453
PROCEDURE Delete_Data_Permission ( nDtId IN DATA_PERMISSIONS.DT_ID%TYPE,
2454
								   nRoleId IN DATA_PERMISSIONS.ROLE_ID%TYPE,
2455
								   nRefCol IN DATA_PERMISSIONS.REF_COLUMN_VAL%TYPE ) IS
2456
 
2457
 
2458
BEGIN
2459
	/*--------------- Business Rules Here -------------------*/
2460
	IF (nDtId IS NULL) OR (nRoleId IS NULL) OR (nRefCol IS NULL)
2461
	THEN
2462
		RAISE_APPLICATION_ERROR (-20000, 'Missing some parameters! nDtId= '|| nDtId ||', nRoleId='|| nRoleId ||', nRefCol='|| nRefCol );
2463
 
2464
	END IF;
2465
	/*-------------------------------------------------------*/
2466
 
2467
	DELETE
2468
	  FROM DATA_PERMISSIONS dp
2469
	 WHERE dp.ROLE_ID = nRoleId
2470
	   AND dp.DT_ID = nDtId
2471
	   AND dp.REF_COLUMN_VAL = nRefCol;
2472
 
2473
 
2474
END	Delete_Data_Permission;
2475
/*--------------------------------------------------------------------------------------------------*/
2476
 
2477
 
2478
END pk_Control;
2479
/
2480