TIER has a complex set of permissions. The amount of control possible through the user interface can be staggering. The way that TIER permissions are stored in the database is fairly simple but can be cryptic without the magic decoder ring. Magic decoder ring follows.
The following tables and columns are directly involved in permissions:
T4W_CLASSES OP__ID OP__CLASSCLASSNAME
T4W_GROUPS OP__ID OP__TIERNAME
T4W_GROUPS.OP__ID is a negative number
T4W_KEYS OP__ID OP__OWNERCLASS OP__OWNERID OP__OBJECTCLASSID OP__OBJECTID OP__DENIALSORD OP__GRANTSORD
Note that deletes to T4W_GROUPS and T4W_USERS do not delete records in T4W_KEYS.
T4W_KEYS.OP__OWNERCLASS is not used and is always null.
In T4W_KEYS.OP__OWNERID positive values map to T4W_USERS.OP__ID. Negative values map to T4W_GROUPS.OP__ID.
T4W_KEYS.OP__OBJECTCLASSID maps to T4W_CLASSES.OP__ID.
T4W_CLASSES.OP__OBJECTID maps to the object classes T4W_[TABLE] dependent on OP__OBJECTCLASSID. For example if T4W_KEYS.OP__OBJECTCLASSID is 0 then T4W_KEYS.OP__OBJECTID maps to T4W_CLASSES.OP__ID. IF T4W_KEYS.OP__OBJECTCLASSID is 9 then T4W_KEYS.OP__OBJECTID maps to T4W_FORMS.OP__ID.
T4W_KEYS.OP__DENIALSORD and T4W_KEYS.OP__GRANTSORD are bit-product columns.
T4W_MEMBERS LSID RSID
T4W_USERS OP__ID OP__TIERNAME
Some queries that show the relationships:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | --groups members SELECT g.OP__TIERNAME , u.OP__TIERNAME FROM T4W_GROUPS g JOIN T4W_MEMBERS m ON g.OP__ID = m.RSID JOIN T4W_USERS u ON m.LSID = u.OP__ID ORDER BY g.OP__TIERNAME , u.OP__TIERNAME --groups keys SELECT g.op__tiername , c.op__classclassname , k.op__objectid , k.op__denialsord , k.op__grantsord FROM t4w_keys k JOIN t4w_groups g ON k.op__ownerid = g.op__id JOIN t4w_classes c ON k.OP__OBJECTCLASSID = c.op__id order by g.op__tiername , c.op__classclassname , op__denialsord --users keys SELECT u.op__tiername , c.op__classclassname , k.op__objectid , k.op__denialsord , k.op__grantsord FROM t4w_keys k JOIN t4w_users u ON k.op__ownerid = u.op__id JOIN t4w_classes c ON k.OP__OBJECTCLASSID = c.op__id order by u.op__tiername , c.op__classclassname , op__denialsord |
T4W_KEYS.OP__DENIALSORD and T4W_KEYS.OP__GRANTSORD is where it gets interesting. These two columns areĀ bit-product columns. What that means is that each permission maps to a single bit value. That value is summed up and stored in these columns. I’m new to this design pattern myself. Converting the decimal values to binary helped to clarify the situation.
| Parameter | Decimal | Binary |
| Parameter 1 | 1 | 1 |
| Parameter 2 | 2 | 10 |
| Parameter 3 | 4 | 100 |
| Parameter 4 | 8 | 1000 |
| Parameter 5 | 16 | 10000 |
This chart should help to show that a decimal value of 12 equals binary value 1100 which is equal to parameters 3 (100) and 4 (1000). T-SQL Bitwise Operations was instrumental in helping me to understand what was going on and how to put it to use.
Mappings
Unfortunately TIERs mapping of parameters to values is in the executable. We’ll have to create our own mapping tables and look up each key by hand. Here is a good start for RM_PermissionKeyGroup and RM_PermissionKeys. I’ve only tracked down permissions for Cabinets, Folders, Forms and Form Sections. You’ll have to do the rest on your own for now.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | /*this table is used to properly map permissions to groups SELECT * FROM RM_PermissionKeyGroup ORDER BY SortOrder */ DROP TABLE RM_PermissionKeyGroup CREATE TABLE RM_PermissionKeyGroup( ID int NULL, Name varchar(50) NULL, OP__ObjectClassID int NULL, OP__ObjectID int NULL, SortOrder int NULL ) --Form Class (all forms) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (1, 'Audit Forms - All', NULL, NULL, 1) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (2, 'Audit Forms - By Category', NULL, NULL, 2) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (3, 'Audit Forms - By Form', NULL, NULL, 3) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (4, 'Audit Reports - All', NULL, NULL, 4) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (5, 'Audit Reports - By Category', NULL, NULL, 5) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (6, 'Audit Reports - By Form', NULL, NULL, 6) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (7, 'Auto Log Off', NULL, NULL, 7) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (8, 'Cabinets - All', 0, 6, 8) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (9, 'Cabinets - By Cabinet', 6, NULL, 9) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (10, 'Configuration', NULL, NULL, 10) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (11, 'Databases - All', NULL, NULL, 11) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (12, 'Databases - By Database', NULL, NULL, 12) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (13, 'Drill Downs - All', NULL, NULL, 13) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (14, 'Drill Downs - By Category', NULL, NULL, 14) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (15, 'Drill Downs - By Drill Down', NULL, NULL, 15) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (16, 'Folder Groups - All', NULL, NULL, 16) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (17, 'Folder Groups - By Category', NULL, NULL, 17) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (18, 'Folder Groups - By Group', NULL, NULL, 18) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (19, 'Folders - All', 0, 15, 19) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (20, 'Folders - By Cabinet', 6, NULL, 20) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (21, 'Folders - By Folder', 15, NULL, 21) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (22, 'Form Packets - All', NULL, NULL, 22) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (23, 'Form Packets - By Category', NULL, NULL, 23) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (24, 'Form Packets - By Packet', NULL, NULL, 24) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (25, 'Form Sections - All', 0, 17, 25) --INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (26, 'Form Sections - By Form', NULL, NULL, 26) --actually done with forms INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (27, 'Form Sections - By Section', 17, NULL, 27) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (28, 'Forms - All', 0, 9, 28) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (29, 'Forms - By Category', 8, NULL, 29) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (30, 'Forms - By Form', 9, NULL, 30) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (31, 'Groups - All', NULL, NULL, 31) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (32, 'Groups - By Group', NULL, NULL, 32) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (33, 'Important Specification - All', NULL, NULL, 33) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (34, 'Important Specification - By Category', NULL, NULL, 34) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (35, 'Important Specification - By Specification', NULL, NULL, 35) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (36, 'Locks', NULL, NULL, 36) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (37, 'Reports - All', NULL, NULL, 37) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (38, 'Reports - By Category', NULL, NULL, 38) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (39, 'Reports - By Report', NULL, NULL, 39) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (40, 'Schedule', NULL, NULL, 40) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (41, 'Snap Shot Definitions - All', NULL, NULL, 41) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (42, 'Snap Shot Definitions - By Category', NULL, NULL, 42) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (43, 'Snap Shot Definitions - By Snapshot Definition', NULL, NULL, 43) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (44, 'SQLReports - All', NULL, NULL, 44) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (45, 'SQLReports - By Category', NULL, NULL, 45) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (46, 'SQLReports - By SQL Report', NULL, NULL, 46) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (47, 'Tasks', NULL, NULL, 47) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (48, 'TierReportBuilder - All', NULL, NULL, 48) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (49, 'TierReportBuilder - By Category', NULL, NULL, 49) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (50, 'TierReportBuilder - By Reports', NULL, NULL, 50) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (51, 'Users - All', NULL, NULL, 51) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (52, 'Users - By Group', NULL, NULL, 52) INSERT INTO RM_PermissionKeyGroup (ID, Name, OP__ObjectClassID, OP__ObjectID, SortOrder) VALUES (53, 'Users - By User', NULL, NULL, 53) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 | /*this table is used to properly map permissions to groups select * from RM_PermissionKeys order by KeyGroupID , sortorder */ DROP TABLE RM_PermissionKeys CREATE TABLE [RM_PermissionKeys]( [KeyGroupID] [int] NULL, [Permission] [varchar](50) NULL, [DecimalValue] [int] NULL, [SortOrder] [int] NULL ) --Cabinets - All INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (8, 'Root Visible', 256, 1) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (8, 'Visible', 1, 2) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (8, 'View Properties', 2, 3) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (8, 'Edit Properties', 4, 4) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (8, 'New Cabinet', 8, 5) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (8, 'Delete Cabinet', 16, 6) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (8, 'Move Cabinet', 64, 7) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (8, 'Copy Cabinet', 128, 8) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (8, 'New Folder', 32, 9) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (8, 'Import Info', 512, 10) --Cabinets - By Cabinet INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (9, 'Visible', 1, 2) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (9, 'View Properties', 2, 3) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (9, 'Edit Properties', 4, 4) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (9, 'New Cabinet', 8, 5) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (9, 'Delete Cabinet', 16, 6) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (9, 'Move Cabinet', 64, 7) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (9, 'Copy Cabinet', 128, 8) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (9, 'New Folder', 32, 9) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (9, 'Import Info', 512, 10) --Folders - All INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (19, 'Visible', 65536, 1) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (19, 'See Contents List', 131072, 2) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (19, 'Send To Folder Group', 32768, 3) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (19, 'View Documents', 262144, 4) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (19, 'Print Documents', -2147483648, 5) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (19, 'Edit Documents', 524288, 6) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (19, 'Move Documents', 268435456, 7) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (19, 'Save Documents', 1048576, 8) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (19, 'Copy Documents', 8192, 9) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (19, 'Save Drafts', 2097152, 10) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (19, 'New Document', 4194304, 11) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (19, 'Delete Document', 8388608, 12) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (19, 'Rename Folder', 16777216, 13) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (19, 'Delete Folder', 33554432, 14) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (19, 'Move Folder', 536870912, 15) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (19, 'Copy Folder', 1073741824, 16) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (19, 'New Subfolder', 67108864, 17) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (19, 'Delete Subfolder', 134217728, 18) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (19, 'Import Info', 16384, 19) --Folders - By Cabinet INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (20, 'Visible', 65536, 1) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (20, 'See Contents List', 131072, 2) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (20, 'Send To Folder Group', 32768, 3) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (20, 'View Documents', 262144, 4) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (20, 'Print Documents', -2147483648, 5) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (20, 'Edit Documents', 524288, 6) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (20, 'Move Documents', 268435456, 7) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (20, 'Save Documents', 1048576, 8) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (20, 'Copy Documents', 8192, 9) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (20, 'Save Drafts', 2097152, 10) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (20, 'New Document', 4194304, 11) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (20, 'Delete Document', 8388608, 12) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (20, 'Rename Folder', 16777216, 13) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (20, 'Delete Folder', 33554432, 14) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (20, 'Move Folder', 536870912, 15) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (20, 'Copy Folder', 1073741824, 16) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (20, 'New Subfolder', 67108864, 17) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (20, 'Delete Subfolder', 134217728, 18) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (20, 'Import Info', 16384, 19) --Folders - By Folder INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (21, 'See Contents List', 131072, 2) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (21, 'Send To Folder Group', 32768, 3) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (21, 'View Documents', 262144, 4) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (21, 'Print Documents', -2147483648, 5) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (21, 'Edit Documents', 524288, 6) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (21, 'Move Documents', 268435456, 7) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (21, 'Save Documents', 1048576, 8) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (21, 'Copy Documents', 8192, 9) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (21, 'Save Drafts', 2097152, 10) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (21, 'New Document', 4194304, 11) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (21, 'Delete Document', 8388608, 12) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (21, 'Rename Folder', 16777216, 13) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (21, 'Delete Folder', 33554432, 14) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (21, 'Move Folder', 536870912, 15) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (21, 'Copy Folder', 1073741824, 16) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (21, 'New Subfolder', 67108864, 17) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (21, 'Delete Subfolder', 134217728, 18) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (21, 'Import Info', 16384, 19) --Form Sections - All INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (25, 'View', 16777216, 1) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (25, 'Edit', 33554432, 2) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (25, 'Sign', 67108864, 3) --Form Sections - By Form --These are actually in the form permissions. --Form Sections - By Section INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (27, 'View', 16777216, 1) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (27, 'Edit', 33554432, 2) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (27, 'Sign', 67108864, 3) --Form Class (all forms) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Root Visible', 131072, 1) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Category Visible', 262144, 2) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Visible', 1, 3) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Add To Folder Group', 4194304, 4) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Scan Properties', 2, 5) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'View Properties', 4, 6) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'New Form', 8, 7) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'New Category', 16, 8) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Delete Category', 32, 9) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Rename Category', 64, 10) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Copy Category', 524288, 11) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'View Form', 128, 12) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Edit Form', 256, 13) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Delete Form', 512, 14) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Copy Form', 1024, 15) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Move Form', 2048, 16) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Visible in Folder', 2097152, 17) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'View Documents', 4096, 18) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'New Documents', 8388608, 19) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Edit Documents', 8192, 20) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Rename Documents', 1048576, 21) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Print Documents', 65536, 22) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Save Documents', 16384, 23) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Save Drafts', 32768, 24) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'View Sections', 16777216, 25) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Edit Sections', 33554432, 26) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (28, 'Sign Sections', 67108864, 27) --Form Categories INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'Category Visible', 262144, 2) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'Visible', 1, 3) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'Add To Folder Group', 4194304, 4) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'Scan Properties', 2, 5) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'View Properties', 4, 6) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'New Form', 8, 7) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'Delete Category', 32, 9) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'Rename Category', 64, 10) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'Copy Category', 524288, 11) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'View Form', 128, 12) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'Edit Form', 256, 13) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'Delete Form', 512, 14) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'Copy Form', 1024, 15) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'Move Form', 2048, 16) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'Visible in Folder', 2097152, 17) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'View Documents', 4096, 18) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'New Documents', 8388608, 19) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'Edit Documents', 8192, 20) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'Rename Documents', 1048576, 21) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'Print Documents', 65536, 22) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'Save Documents', 16384, 23) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'Save Drafts', 32768, 24) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'View Sections', 16777216, 25) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'Edit Sections', 33554432, 26) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (29, 'Sign Sections', 67108864, 27) --Forms - by form INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (30, 'Visible', 1, 3) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (30, 'Add To Folder Group', 4194304, 4) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (30, 'View Form', 128, 12) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (30, 'Edit Form', 256, 13) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (30, 'Delete Form', 512, 14) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (30, 'Copy Form', 1024, 15) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (30, 'Move Form', 2048, 16) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (30, 'Visible in Folder', 2097152, 17) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (30, 'View Documents', 4096, 18) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (30, 'New Documents', 8388608, 19) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (30, 'Edit Documents', 8192, 20) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (30, 'Rename Documents', 1048576, 21) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (30, 'Print Documents', 65536, 22) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (30, 'Save Documents', 16384, 23) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (30, 'Save Drafts', 32768, 24) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (30, 'View Sections', 16777216, 25) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (30, 'Edit Sections', 33554432, 26) INSERT INTO RM_PermissionKeys (KeyGroupID, Permission, DecimalValue, SortOrder) VALUES (30, 'Sign Sections', 67108864, 27) |
Reporting Values
Here is a query showing our mappings being put to use.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 | SELECT CASE WHEN g.OP__TIERNAME IS NOT NULL THEN 'Group' WHEN u.OP__TIERNAME IS NOT NULL THEN 'User' END AS GroupUser , CASE WHEN g.OP__TIERNAME IS NOT NULL THEN g.OP__TIERNAME WHEN u.OP__TIERNAME IS NOT NULL THEN u.OP__TIERNAME END AS Name , pkg.Name AS KeyGroup , NULL AS Item , pk.Permission , 'Grant' AS Setting , pkg.SortOrder AS KeyGroupOrder , pk.SortOrder FROM T4W_KEYS k JOIN T4W_CLASSES c ON k.OP__OBJECTID = c.OP__ID JOIN RM_PermissionKeyGroup pkg ON pkg.OP__ObjectID = c.OP__ID JOIN RM_PermissionKeys pk ON pkg.ID = pk.KeyGroupID LEFT JOIN T4W_GROUPS g ON g.OP__ID = k.OP__OWNERID LEFT JOIN T4W_USERS u ON u.OP__ID = k.OP__OWNERID WHERE k.OP__OBJECTCLASSID = 0 AND k.op__grantsord & pk.decimalvalue <> 0 AND (g.OP__TIERNAME IS NOT NULL OR u.OP__TIERNAME IS NOT NULL) UNION ALL SELECT CASE WHEN g.OP__TIERNAME IS NOT NULL THEN 'Group' WHEN u.OP__TIERNAME IS NOT NULL THEN 'User' END AS GroupUser , CASE WHEN g.OP__TIERNAME IS NOT NULL THEN g.OP__TIERNAME WHEN u.OP__TIERNAME IS NOT NULL THEN u.OP__TIERNAME END AS Name , pkg.Name AS KeyGroup , NULL AS Item , pk.Permission , 'Denial' AS Setting , pkg.SortOrder AS KeyGroupOrder , pk.SortOrder FROM T4W_KEYS k JOIN T4W_CLASSES c ON k.OP__OBJECTID = c.OP__ID JOIN RM_PermissionKeyGroup pkg ON pkg.OP__ObjectID = c.OP__ID JOIN RM_PermissionKeys pk ON pkg.ID = pk.KeyGroupID LEFT JOIN T4W_GROUPS g ON g.OP__ID = k.OP__OWNERID LEFT JOIN T4W_USERS u ON u.OP__ID = k.OP__OWNERID WHERE k.OP__OBJECTCLASSID = 0 AND k.op__denialsord & pk.decimalvalue <> 0 AND (g.OP__TIERNAME IS NOT NULL OR u.OP__TIERNAME IS NOT NULL) UNION ALL SELECT CASE WHEN g.OP__TIERNAME IS NOT NULL THEN 'Group' WHEN u.OP__TIERNAME IS NOT NULL THEN 'User' END AS GroupUser , CASE WHEN g.OP__TIERNAME IS NOT NULL THEN g.OP__TIERNAME WHEN u.OP__TIERNAME IS NOT NULL THEN u.OP__TIERNAME END AS Name , pkg.Name AS KeyGroup , c.op__tiername AS Item , pk.Permission , 'Grant' AS Setting , pkg.SortOrder AS KeyGroupOrder , pk.SortOrder FROM T4W_KEYS k JOIN T4W_CABINETS c ON k.OP__OBJECTID = c.OP__ID JOIN RM_PermissionKeyGroup pkg ON pkg.op__ObjectClassID = k.op__ObjectClassID JOIN RM_PermissionKeys pk ON pkg.ID = pk.KeyGroupID LEFT JOIN T4W_GROUPS g ON g.OP__ID = k.OP__OWNERID LEFT JOIN T4W_USERS u ON u.OP__ID = k.OP__OWNERID WHERE k.OP__OBJECTCLASSID = 6 AND k.op__grantsord & pk.decimalvalue <> 0 AND (g.OP__TIERNAME IS NOT NULL OR u.OP__TIERNAME IS NOT NULL) UNION ALL SELECT CASE WHEN g.OP__TIERNAME IS NOT NULL THEN 'Group' WHEN u.OP__TIERNAME IS NOT NULL THEN 'User' END AS GroupUser , CASE WHEN g.OP__TIERNAME IS NOT NULL THEN g.OP__TIERNAME WHEN u.OP__TIERNAME IS NOT NULL THEN u.OP__TIERNAME END AS Name , pkg.Name AS KeyGroup , c.op__tiername AS Item , pk.Permission , 'Denial' AS Setting , pkg.SortOrder AS KeyGroupOrder , pk.SortOrder FROM T4W_KEYS k JOIN T4W_CABINETS c ON k.OP__OBJECTID = c.OP__ID JOIN RM_PermissionKeyGroup pkg ON pkg.op__ObjectClassID = k.op__ObjectClassID JOIN RM_PermissionKeys pk ON pkg.ID = pk.KeyGroupID LEFT JOIN T4W_GROUPS g ON g.OP__ID = k.OP__OWNERID LEFT JOIN T4W_USERS u ON u.OP__ID = k.OP__OWNERID WHERE k.OP__OBJECTCLASSID = 6 AND k.op__denialsord & pk.decimalvalue <> 0 AND (g.OP__TIERNAME IS NOT NULL OR u.OP__TIERNAME IS NOT NULL) UNION ALL SELECT CASE WHEN g.OP__TIERNAME IS NOT NULL THEN 'Group' WHEN u.OP__TIERNAME IS NOT NULL THEN 'User' END AS GroupUser , CASE WHEN g.OP__TIERNAME IS NOT NULL THEN g.OP__TIERNAME WHEN u.OP__TIERNAME IS NOT NULL THEN u.OP__TIERNAME END AS Name , pkg.Name AS KeyGroup , ISNULL(f.OP__TIERNAME, '') + ' -- ' + ISNULL(fs.op__tiername,'') + '\"' AS Item , pk.Permission , 'Grant' AS Setting , pkg.SortOrder AS KeyGroupOrder , pk.SortOrder FROM T4W_KEYS k JOIN T4W_FORMSECTIONS fs ON k.OP__OBJECTID = fs.OP__ID JOIN T4W_FORMS f ON fs.OP__PARENTID = f.OP__ID JOIN RM_PermissionKeyGroup pkg ON pkg.op__ObjectClassID = k.op__ObjectClassID JOIN RM_PermissionKeys pk ON pkg.ID = pk.KeyGroupID LEFT JOIN T4W_GROUPS g ON g.OP__ID = k.OP__OWNERID LEFT JOIN T4W_USERS u ON u.OP__ID = k.OP__OWNERID WHERE k.OP__OBJECTCLASSID = 17 AND k.op__grantsord & pk.decimalvalue <> 0 AND (g.OP__TIERNAME IS NOT NULL OR u.OP__TIERNAME IS NOT NULL) UNION ALL SELECT CASE WHEN g.OP__TIERNAME IS NOT NULL THEN 'Group' WHEN u.OP__TIERNAME IS NOT NULL THEN 'User' END AS GroupUser , CASE WHEN g.OP__TIERNAME IS NOT NULL THEN g.OP__TIERNAME WHEN u.OP__TIERNAME IS NOT NULL THEN u.OP__TIERNAME END AS Name , pkg.Name AS KeyGroup , ISNULL(f.OP__TIERNAME, '') + ' -- ' + ISNULL(fs.op__tiername,'') AS Item , pk.Permission , 'Denial' AS Setting , pkg.SortOrder AS KeyGroupOrder , pk.SortOrder FROM T4W_KEYS k JOIN T4W_FORMSECTIONS fs ON k.OP__OBJECTID = fs.OP__ID JOIN T4W_FORMS f ON fs.OP__PARENTID = f.OP__ID JOIN RM_PermissionKeyGroup pkg ON pkg.op__ObjectClassID = k.op__ObjectClassID JOIN RM_PermissionKeys pk ON pkg.ID = pk.KeyGroupID LEFT JOIN T4W_GROUPS g ON g.OP__ID = k.OP__OWNERID LEFT JOIN T4W_USERS u ON u.OP__ID = k.OP__OWNERID WHERE k.OP__OBJECTCLASSID = 17 AND k.op__denialsord & pk.decimalvalue <> 0 AND (g.OP__TIERNAME IS NOT NULL OR u.OP__TIERNAME IS NOT NULL) UNION ALL SELECT CASE WHEN g.OP__TIERNAME IS NOT NULL THEN 'Group' WHEN u.OP__TIERNAME IS NOT NULL THEN 'User' END AS GroupUser , CASE WHEN g.OP__TIERNAME IS NOT NULL THEN g.OP__TIERNAME WHEN u.OP__TIERNAME IS NOT NULL THEN u.OP__TIERNAME END AS Name , pkg.Name AS KeyGroup , fc.op__tiername AS Item , pk.Permission , 'Grant' AS Setting , pkg.SortOrder AS KeyGroupOrder , pk.SortOrder FROM T4W_KEYS k JOIN T4W_FORMCATS fc ON k.OP__OBJECTID = fc.OP__ID JOIN RM_PermissionKeyGroup pkg ON pkg.op__ObjectClassID = k.op__ObjectClassID JOIN RM_PermissionKeys pk ON pkg.ID = pk.KeyGroupID LEFT JOIN T4W_GROUPS g ON g.OP__ID = k.OP__OWNERID LEFT JOIN T4W_USERS u ON u.OP__ID = k.OP__OWNERID WHERE k.OP__OBJECTCLASSID = 8 AND k.op__grantsord & pk.decimalvalue <> 0 AND (g.OP__TIERNAME IS NOT NULL OR u.OP__TIERNAME IS NOT NULL) UNION ALL SELECT CASE WHEN g.OP__TIERNAME IS NOT NULL THEN 'Group' WHEN u.OP__TIERNAME IS NOT NULL THEN 'User' END AS GroupUser , CASE WHEN g.OP__TIERNAME IS NOT NULL THEN g.OP__TIERNAME WHEN u.OP__TIERNAME IS NOT NULL THEN u.OP__TIERNAME END AS Name , pkg.Name AS KeyGroup , fc.op__tiername AS Item , pk.Permission , 'Denial' AS Setting , pkg.SortOrder AS KeyGroupOrder , pk.SortOrder FROM T4W_KEYS k JOIN T4W_FORMCATS fc ON k.OP__OBJECTID = fc.OP__ID JOIN RM_PermissionKeyGroup pkg ON pkg.op__ObjectClassID = k.op__ObjectClassID JOIN RM_PermissionKeys pk ON pkg.ID = pk.KeyGroupID LEFT JOIN T4W_GROUPS g ON g.OP__ID = k.OP__OWNERID LEFT JOIN T4W_USERS u ON u.OP__ID = k.OP__OWNERID WHERE k.OP__OBJECTCLASSID = 8 AND k.op__denialsord & pk.decimalvalue <> 0 AND (g.OP__TIERNAME IS NOT NULL OR u.OP__TIERNAME IS NOT NULL) UNION ALL SELECT CASE WHEN g.OP__TIERNAME IS NOT NULL THEN 'Group' WHEN u.OP__TIERNAME IS NOT NULL THEN 'User' END AS GroupUser , CASE WHEN g.OP__TIERNAME IS NOT NULL THEN g.OP__TIERNAME WHEN u.OP__TIERNAME IS NOT NULL THEN u.OP__TIERNAME END AS Name , pkg.Name AS KeyGroup , f.op__tiername AS Item , pk.Permission , 'Grant' AS Setting , pkg.SortOrder AS KeyGroupOrder , pk.SortOrder FROM T4W_KEYS k JOIN T4W_FORMS f ON k.OP__OBJECTID = f.OP__ID JOIN RM_PermissionKeyGroup pkg ON pkg.op__ObjectClassID = k.op__ObjectClassID JOIN RM_PermissionKeys pk ON pkg.ID = pk.KeyGroupID LEFT JOIN T4W_GROUPS g ON g.OP__ID = k.OP__OWNERID LEFT JOIN T4W_USERS u ON u.OP__ID = k.OP__OWNERID WHERE k.OP__OBJECTCLASSID = 9 AND k.op__grantsord & pk.decimalvalue <> 0 AND (g.OP__TIERNAME IS NOT NULL OR u.OP__TIERNAME IS NOT NULL) UNION ALL SELECT CASE WHEN g.OP__TIERNAME IS NOT NULL THEN 'Group' WHEN u.OP__TIERNAME IS NOT NULL THEN 'User' END AS GroupUser , CASE WHEN g.OP__TIERNAME IS NOT NULL THEN g.OP__TIERNAME WHEN u.OP__TIERNAME IS NOT NULL THEN u.OP__TIERNAME END AS Name , pkg.Name AS KeyGroup , f.op__tiername AS Item , pk.Permission , 'Denial' AS Setting , pkg.SortOrder AS KeyGroupOrder , pk.SortOrder FROM T4W_KEYS k JOIN T4W_FORMS f ON k.OP__OBJECTID = f.OP__ID JOIN RM_PermissionKeyGroup pkg ON pkg.op__ObjectClassID = k.op__ObjectClassID JOIN RM_PermissionKeys pk ON pkg.ID = pk.KeyGroupID LEFT JOIN T4W_GROUPS g ON g.OP__ID = k.OP__OWNERID LEFT JOIN T4W_USERS u ON u.OP__ID = k.OP__OWNERID WHERE k.OP__OBJECTCLASSID = 9 AND k.op__denialsord & pk.decimalvalue <> 0 AND (g.OP__TIERNAME IS NOT NULL OR u.OP__TIERNAME IS NOT NULL) ORDER BY GroupUser , Name , KeyGroupOrder , Item , pk.SortOrder , Setting DESC |
Verifying user has permission
The catalyst to all this research was that we needed to be able to verify a user had permission to create a new document in our stored procedures. It’s probably possible to make the function CheckPermissionNewDoc more generic for any permission. However, the interdependency of the different permissions makes that possibility a bit cumbersome. This function specifically checks the “New Document” permission in:
- Folders – All
- Folders – By Cabinet
- Folders – By Folder
- Forms – All
- Forms – By Category
- Forms – By Form
There are a couple of caveats to this function. The function only checks the folders direct cabinet. It does not check permissions on a cabinet’s cabinet. The function only checks permission of the forms direct category. The parent categories of a nested form category are not checked.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 | /****************************************************************************** NOTES: Must check denials before grants Only checks cabinet of folder not the cabinets of the cabinet. Checks are in rough order according to probability of being set EXAMPLE: DECLARE @Permission INT SET @Permission = dbo.CheckPermissionNewDoc (125, 11418, 2625) PRINT @Permission HISTORY: See Source Control ******************************************************************************/ CREATE FUNCTION dbo.CheckPermissionNewDoc ( @TIERUser INT , @FormID INT , @FolderID INT ) RETURNS INT AS BEGIN DECLARE @DenialsCount INT DECLARE @FormsGrantsCount INT DECLARE @FolderGrantsCount INT --Denial on Forms - All SELECT @DenialsCount = COUNT(1) FROM T4W_KEYS k LEFT JOIN T4W_GROUPS g ON k.OP__OWNERID = g.OP__ID LEFT JOIN T4W_MEMBERS m ON g.OP__ID = m.RSID WHERE (k.OP__OWNERID = @TIERUser OR m.LSID = @TIERUser) AND k.OP__OBJECTCLASSID = 0 --classes AND k.OP__OBJECTID = 9 -- forms AND k.OP__DENIALSORD & 8388608 <> 0 IF @DenialsCount > 0 BEGIN RETURN 1 END --Denial on Forms - By Category SELECT @DenialsCount = COUNT(1) FROM T4W_KEYS k LEFT JOIN T4W_GROUPS g ON k.OP__OWNERID = g.OP__ID LEFT JOIN T4W_MEMBERS m ON g.OP__ID = m.RSID WHERE (k.OP__OWNERID = @TIERUser OR m.LSID = @TIERUser) AND k.OP__OBJECTCLASSID = 8 --forms - by category AND k.OP__OBJECTID = ( SELECT f.OP__PARENTID FROM t4w_forms f WHERE f.op__id = @FormID ) AND k.OP__DENIALSORD & 8388608 <> 0 IF @DenialsCount > 0 BEGIN RETURN 1 END --Denial on Forms - By Form SELECT @DenialsCount = COUNT(1) FROM T4W_KEYS k LEFT JOIN T4W_GROUPS g ON k.OP__OWNERID = g.OP__ID LEFT JOIN T4W_MEMBERS m ON g.OP__ID = m.RSID WHERE (k.OP__OWNERID = @TIERUser OR m.LSID = @TIERUser) AND k.OP__OBJECTCLASSID = 9 --forms - by form AND k.OP__OBJECTID = @FormID AND k.OP__DENIALSORD & 8388608 <> 0 IF @DenialsCount > 0 BEGIN RETURN 1 END --Denial on Folders - All SELECT @DenialsCount = COUNT(1) FROM T4W_KEYS k LEFT JOIN T4W_GROUPS g ON k.OP__OWNERID = g.OP__ID LEFT JOIN T4W_MEMBERS m ON g.OP__ID = m.RSID WHERE (k.OP__OWNERID = @TIERUser OR m.LSID = @TIERUser) AND k.OP__OBJECTCLASSID = 0 --classes AND k.OP__OBJECTID = 15 -- folders AND k.OP__DENIALSORD & 4194304 <> 0 IF @DenialsCount > 0 BEGIN RETURN 1 END --Denial on Folders - By Cabinet SELECT @DenialsCount = COUNT(1) FROM T4W_KEYS k LEFT JOIN T4W_GROUPS g ON k.OP__OWNERID = g.OP__ID LEFT JOIN T4W_MEMBERS m ON g.OP__ID = m.RSID WHERE (k.OP__OWNERID = @TIERUser OR m.LSID = @TIERUser) AND k.OP__OBJECTCLASSID = 6 --folders - by cabinet AND k.OP__OBJECTID = ( SELECT f.OP__PARENTID FROM t4w_folders f WHERE f.op__id = @FolderID ) AND k.OP__DENIALSORD & 4194304 <> 0 IF @DenialsCount > 0 BEGIN RETURN 1 END --Denial on Folders - By Folder SELECT @DenialsCount = COUNT(1) FROM T4W_KEYS k LEFT JOIN T4W_GROUPS g ON k.OP__OWNERID = g.OP__ID LEFT JOIN T4W_MEMBERS m ON g.OP__ID = m.RSID WHERE (k.OP__OWNERID = @TIERUser OR m.LSID = @TIERUser) AND k.OP__OBJECTCLASSID = 15 --folders - by folder AND k.OP__OBJECTID = @FolderID AND k.OP__DENIALSORD & 4194304 <> 0 IF @DenialsCount > 0 BEGIN RETURN 1 END --Grant on Forms - All SELECT @FormsGrantsCount = COUNT(1) FROM T4W_KEYS k LEFT JOIN T4W_GROUPS g ON k.OP__OWNERID = g.OP__ID LEFT JOIN T4W_MEMBERS m ON g.OP__ID = m.RSID WHERE (k.OP__OWNERID = @TIERUser OR m.LSID = @TIERUser) AND k.OP__OBJECTCLASSID = 0 --classes AND k.OP__OBJECTID = 9 -- forms AND k.OP__GRANTSORD & 8388608 <> 0 IF @FormsGrantsCount = 0 BEGIN --Grant on Forms - By Category SELECT @FormsGrantsCount = COUNT(1) FROM T4W_KEYS k LEFT JOIN T4W_GROUPS g ON k.OP__OWNERID = g.OP__ID LEFT JOIN T4W_MEMBERS m ON g.OP__ID = m.RSID WHERE (k.OP__OWNERID = @TIERUser OR m.LSID = @TIERUser) AND k.OP__OBJECTCLASSID = 8 --forms - by category AND k.OP__OBJECTID = ( SELECT f.OP__PARENTID FROM t4w_forms f WHERE f.op__id = @FormID ) AND k.OP__GRANTSORD & 8388608 <> 0 IF @FormsGrantsCount = 0 BEGIN --Grant on Forms - By Form SELECT @FormsGrantsCount = COUNT(1) FROM T4W_KEYS k LEFT JOIN T4W_GROUPS g ON k.OP__OWNERID = g.OP__ID LEFT JOIN T4W_MEMBERS m ON g.OP__ID = m.RSID WHERE (k.OP__OWNERID = @TIERUser OR m.LSID = @TIERUser) AND k.OP__OBJECTCLASSID = 9 --forms - by form AND k.OP__OBJECTID = @FormID AND k.OP__GRANTSORD & 8388608 <> 0 IF @FormsGrantsCount = 0 BEGIN RETURN 1 --forms are not granted at any level END END END --Grant on Folders - All SELECT @FolderGrantsCount = COUNT(1) FROM T4W_KEYS k LEFT JOIN T4W_GROUPS g ON k.OP__OWNERID = g.OP__ID LEFT JOIN T4W_MEMBERS m ON g.OP__ID = m.RSID WHERE (k.OP__OWNERID = @TIERUser OR m.LSID = @TIERUser) AND k.OP__OBJECTCLASSID = 0 --classes AND k.OP__OBJECTID = 15 -- folders AND k.OP__GRANTSORD & 4194304 <> 0 IF @FolderGrantsCount = 0 BEGIN --Grant on Folders - By Cabinet SELECT @FolderGrantsCount = COUNT(1) FROM T4W_KEYS k LEFT JOIN T4W_GROUPS g ON k.OP__OWNERID = g.OP__ID LEFT JOIN T4W_MEMBERS m ON g.OP__ID = m.RSID WHERE (k.OP__OWNERID = @TIERUser OR m.LSID = @TIERUser) AND k.OP__OBJECTCLASSID = 6 --folders - by cabinet AND k.OP__OBJECTID = ( SELECT f.OP__PARENTID FROM t4w_folders f WHERE f.op__id = @FolderID ) AND k.OP__GRANTSORD & 4194304 <> 0 IF @FolderGrantsCount = 0 BEGIN --Grant on Folders - By Folder SELECT @FolderGrantsCount = COUNT(1) FROM T4W_KEYS k LEFT JOIN T4W_GROUPS g ON k.OP__OWNERID = g.OP__ID LEFT JOIN T4W_MEMBERS m ON g.OP__ID = m.RSID WHERE (k.OP__OWNERID = @TIERUser OR m.LSID = @TIERUser) AND k.OP__OBJECTCLASSID = 15 --folders - by folder AND k.OP__OBJECTID = @FolderID AND k.OP__GRANTSORD & 4194304 <> 0 IF @FolderGrantsCount = 0 BEGIN RETURN 1 END END END RETURN 0 --success END |
Here is an example of what usp_NewDocumentTest5 might look like from my previous post Design Patterns for Creating New Documents in TIER
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | /****************************************************************************** NOTES: Demonstrates the use of checking permissions EXAMPLE: usp_NewDocumentTest5 @ParentID = :TIER_DocID, @FolderID = :TIER_FolderID , @UserID = :TIER_UserID EXEC usp_NewDocumentTest5 @ParentID = 12916698, @UserID = 125 ******************************************************************************/ CREATE PROCEDURE dbo.usp_NewDocumentTest5 ( @ParentID INT , @FolderID INT , @UserID INT ) AS SET NOCOUNT ON -- Otherwise TIER wont see messages. DECLARE @FormID INT = 11421 -- New Document Test Sub , @NewDocID INT , @ErrorID INT = 1 SET @ErrorID = dbo.CheckPermissionNewDoc (@UserID, @FormID, @FolderID) IF @ErrorID <> 0 BEGIN raiserror('You do not have permission to create document.',16,1) return @ErrorID END EXEC @ErrorID = usp_GenerateNewID @ClassID = 7 --Document , @NewDocID = @NewDocID OUTPUT IF @ErrorID <> 0 BEGIN raiserror('Doc ID creation failed.',16,1) return @ErrorID END -- Ensure that both records are created or neither are BEGIN TRANSACTION InsertDoc BEGIN TRY EXEC usp_CreateT4WDocument2 @NewDocID = @NewDocID , @ParentID = @ParentID , @FormID = @FormID , @UserID = @UserID INSERT FD__NEW_DOCUMENT_TEST_SUB (OP__DOCID , OP__PARENTID , OP__FOLDERID , TestField1 , TestMemo1 ) VALUES ( @NewDocID , @ParentID , @ParentID , 'usp_NewDocumentTest4 - error checking' , 'A test memo' ) END TRY BEGIN CATCH DECLARE @ErrorMessage VARCHAR(100) , @ErrorSeverity INT , @ErrorState INT SELECT @ErrorMessage = ERROR_MESSAGE() , @ErrorSeverity = ERROR_SEVERITY() , @ErrorState = ERROR_STATE() RAISERROR (@ErrorMessage , @ErrorSeverity , @ErrorState ) ROLLBACK TRANSACTION InsertDoc RETURN 1 END CATCH COMMIT TRANSACTION InsertDoc RETURN |






