User commited on
Commit
b574355
·
1 Parent(s): bec15e2

fix: remove hardcoding role authorization for more flexibility

Browse files
TaskTrackingSystem.WebApi/Features/Report/ReportController.cs CHANGED
@@ -11,7 +11,7 @@ namespace TaskTrackingSystem.WebApi.Features.Report
11
  {
12
  [Route("api/[controller]")]
13
  [ApiController]
14
- [Authorize(Roles = "Admin,Manager")]
15
  public class ReportController : ControllerBase
16
  {
17
  private readonly ReportService _reportService;
 
11
  {
12
  [Route("api/[controller]")]
13
  [ApiController]
14
+ [Authorize]
15
  public class ReportController : ControllerBase
16
  {
17
  private readonly ReportService _reportService;
cleanup-legacy-access-schema.sql DELETED
@@ -1,41 +0,0 @@
1
- /*
2
- Legacy access-schema cleanup script for SQL Server Management Studio.
3
-
4
- Run this only after:
5
- 1. You have a backup of the database.
6
- 2. The new schema is already in place.
7
- 3. You have confirmed that dbo.Menus, dbo.Permissions, dbo.RoleMenus, and dbo.RolePermissions are working.
8
-
9
- This script removes the old scaffolded tables:
10
- - dbo.MenuAdmins
11
- - dbo.MenuAdminDetails
12
- - dbo.RoleMenus_Legacy
13
- */
14
-
15
- SET XACT_ABORT ON;
16
- BEGIN TRY
17
- BEGIN TRANSACTION;
18
-
19
- IF OBJECT_ID('dbo.RoleMenus_Legacy', 'U') IS NOT NULL
20
- BEGIN
21
- DROP TABLE dbo.RoleMenus_Legacy;
22
- END
23
-
24
- IF OBJECT_ID('dbo.MenuAdminDetails', 'U') IS NOT NULL
25
- BEGIN
26
- DROP TABLE dbo.MenuAdminDetails;
27
- END
28
-
29
- IF OBJECT_ID('dbo.MenuAdmins', 'U') IS NOT NULL
30
- BEGIN
31
- DROP TABLE dbo.MenuAdmins;
32
- END
33
-
34
- COMMIT TRANSACTION;
35
- END TRY
36
- BEGIN CATCH
37
- IF @@TRANCOUNT > 0
38
- ROLLBACK TRANSACTION;
39
-
40
- THROW;
41
- END CATCH;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
permission-schema-upgrade.sql DELETED
@@ -1,329 +0,0 @@
1
- /*
2
- Safe upgrade path for permission tables.
3
-
4
- What this script does:
5
- 1. Renames the old dbo.RoleMenus table to dbo.RoleMenus_Legacy if it still uses MenuCode.
6
- 2. Creates the new normalized tables:
7
- - dbo.Menus
8
- - dbo.Permissions
9
- - dbo.RoleMenus
10
- - dbo.RolePermissions
11
- 3. Copies data from the old schema into the new schema.
12
-
13
- Run this once in SQL Server Management Studio after backing up the database.
14
- */
15
-
16
- SET XACT_ABORT ON;
17
- BEGIN TRY
18
- BEGIN TRANSACTION;
19
-
20
- -------------------------------------------------------------------------
21
- -- Step 1: rename the legacy RoleMenus table if needed
22
- -------------------------------------------------------------------------
23
- IF OBJECT_ID('dbo.RoleMenus', 'U') IS NOT NULL
24
- AND COL_LENGTH('dbo.RoleMenus', 'MenuId') IS NULL
25
- AND COL_LENGTH('dbo.RoleMenus', 'MenuCode') IS NOT NULL
26
- AND OBJECT_ID('dbo.RoleMenus_Legacy', 'U') IS NULL
27
- BEGIN
28
- EXEC sp_rename 'dbo.RoleMenus', 'RoleMenus_Legacy';
29
- END
30
-
31
- -------------------------------------------------------------------------
32
- -- Step 2: create the new tables if they do not already exist
33
- -------------------------------------------------------------------------
34
- IF OBJECT_ID('dbo.Menus', 'U') IS NULL
35
- BEGIN
36
- CREATE TABLE dbo.Menus (
37
- MenuId bigint IDENTITY(1,1) NOT NULL CONSTRAINT PK_Menus PRIMARY KEY,
38
- MenuCode nvarchar(50) NOT NULL,
39
- ParentMenuId bigint NULL,
40
- MenuName nvarchar(100) NOT NULL,
41
- MenuUrl nvarchar(200) NULL,
42
- Icon nvarchar(50) NULL,
43
- Visible bit NOT NULL CONSTRAINT DF_Menus_Visible DEFAULT (1),
44
- OrderNo int NOT NULL CONSTRAINT DF_Menus_OrderNo DEFAULT (0),
45
- IsDeleted bit NOT NULL CONSTRAINT DF_Menus_IsDeleted DEFAULT (0),
46
- CreatedById bigint NULL,
47
- CreatedAt datetime2(0) NOT NULL CONSTRAINT DF_Menus_CreatedAt DEFAULT (SYSUTCDATETIME()),
48
- UpdatedById bigint NULL,
49
- UpdatedAt datetime2(0) NULL,
50
- CONSTRAINT UQ_Menus_MenuCode UNIQUE (MenuCode)
51
- );
52
-
53
- ALTER TABLE dbo.Menus
54
- ADD CONSTRAINT FK_Menus_ParentMenu
55
- FOREIGN KEY (ParentMenuId) REFERENCES dbo.Menus(MenuId);
56
-
57
- CREATE INDEX IX_Menus_ParentMenuId ON dbo.Menus(ParentMenuId);
58
- END
59
-
60
- IF OBJECT_ID('dbo.Permissions', 'U') IS NULL
61
- BEGIN
62
- CREATE TABLE dbo.Permissions (
63
- PermissionId bigint IDENTITY(1,1) NOT NULL CONSTRAINT PK_Permissions PRIMARY KEY,
64
- PermissionCode nvarchar(50) NOT NULL,
65
- MenuId bigint NOT NULL,
66
- ActionName nvarchar(100) NOT NULL,
67
- ApiName nvarchar(100) NOT NULL,
68
- HttpMethod nvarchar(20) NULL,
69
- Visible bit NOT NULL CONSTRAINT DF_Permissions_Visible DEFAULT (1),
70
- OrderNo int NOT NULL CONSTRAINT DF_Permissions_OrderNo DEFAULT (0),
71
- IsDeleted bit NOT NULL CONSTRAINT DF_Permissions_IsDeleted DEFAULT (0),
72
- CreatedById bigint NULL,
73
- CreatedAt datetime2(0) NOT NULL CONSTRAINT DF_Permissions_CreatedAt DEFAULT (SYSUTCDATETIME()),
74
- UpdatedById bigint NULL,
75
- UpdatedAt datetime2(0) NULL,
76
- CONSTRAINT UQ_Permissions_PermissionCode UNIQUE (PermissionCode)
77
- );
78
-
79
- ALTER TABLE dbo.Permissions
80
- ADD CONSTRAINT FK_Permissions_Menu
81
- FOREIGN KEY (MenuId) REFERENCES dbo.Menus(MenuId);
82
-
83
- CREATE INDEX IX_Permissions_MenuId ON dbo.Permissions(MenuId);
84
- END
85
-
86
- IF OBJECT_ID('dbo.RoleMenus', 'U') IS NULL
87
- BEGIN
88
- CREATE TABLE dbo.RoleMenus (
89
- RoleMenuId bigint IDENTITY(1,1) NOT NULL CONSTRAINT PK_RoleMenus PRIMARY KEY,
90
- RoleId bigint NOT NULL,
91
- MenuId bigint NOT NULL,
92
- IsDeleted bit NOT NULL CONSTRAINT DF_RoleMenus_IsDeleted DEFAULT (0),
93
- CreatedById bigint NULL,
94
- CreatedAt datetime2(0) NOT NULL CONSTRAINT DF_RoleMenus_CreatedAt DEFAULT (SYSUTCDATETIME()),
95
- UpdatedById bigint NULL,
96
- UpdatedAt datetime2(0) NULL,
97
- CONSTRAINT UQ_RoleMenus_Role_Menu UNIQUE (RoleId, MenuId)
98
- );
99
-
100
- ALTER TABLE dbo.RoleMenus
101
- ADD CONSTRAINT FK_RoleMenus_Roles
102
- FOREIGN KEY (RoleId) REFERENCES dbo.Roles(Id);
103
-
104
- ALTER TABLE dbo.RoleMenus
105
- ADD CONSTRAINT FK_RoleMenus_Menus
106
- FOREIGN KEY (MenuId) REFERENCES dbo.Menus(MenuId);
107
-
108
- CREATE INDEX IX_RoleMenus_RoleId ON dbo.RoleMenus(RoleId);
109
- CREATE INDEX IX_RoleMenus_MenuId ON dbo.RoleMenus(MenuId);
110
- END
111
-
112
- IF OBJECT_ID('dbo.RolePermissions', 'U') IS NULL
113
- BEGIN
114
- CREATE TABLE dbo.RolePermissions (
115
- RolePermissionId bigint IDENTITY(1,1) NOT NULL CONSTRAINT PK_RolePermissions PRIMARY KEY,
116
- RoleId bigint NOT NULL,
117
- PermissionId bigint NOT NULL,
118
- IsDeleted bit NOT NULL CONSTRAINT DF_RolePermissions_IsDeleted DEFAULT (0),
119
- CreatedById bigint NULL,
120
- CreatedAt datetime2(0) NOT NULL CONSTRAINT DF_RolePermissions_CreatedAt DEFAULT (SYSUTCDATETIME()),
121
- UpdatedById bigint NULL,
122
- UpdatedAt datetime2(0) NULL,
123
- CONSTRAINT UQ_RolePermissions_Role_Permission UNIQUE (RoleId, PermissionId)
124
- );
125
-
126
- ALTER TABLE dbo.RolePermissions
127
- ADD CONSTRAINT FK_RolePermissions_Roles
128
- FOREIGN KEY (RoleId) REFERENCES dbo.Roles(Id);
129
-
130
- ALTER TABLE dbo.RolePermissions
131
- ADD CONSTRAINT FK_RolePermissions_Permissions
132
- FOREIGN KEY (PermissionId) REFERENCES dbo.Permissions(PermissionId);
133
-
134
- CREATE INDEX IX_RolePermissions_RoleId ON dbo.RolePermissions(RoleId);
135
- CREATE INDEX IX_RolePermissions_PermissionId ON dbo.RolePermissions(PermissionId);
136
- END
137
-
138
- -------------------------------------------------------------------------
139
- -- Step 3: build mapping tables from the old source tables
140
- -------------------------------------------------------------------------
141
- IF OBJECT_ID('tempdb..#MenuStage') IS NOT NULL DROP TABLE #MenuStage;
142
- IF OBJECT_ID('tempdb..#PermissionStage') IS NOT NULL DROP TABLE #PermissionStage;
143
-
144
- CREATE TABLE #MenuStage (
145
- OldMenuCode nvarchar(50) NOT NULL PRIMARY KEY,
146
- OldParentCode nvarchar(50) NULL,
147
- NewMenuId bigint NOT NULL
148
- );
149
-
150
- CREATE TABLE #PermissionStage (
151
- OldPermissionCode nvarchar(50) NOT NULL PRIMARY KEY,
152
- OldParentCode nvarchar(50) NOT NULL,
153
- NewPermissionId bigint NOT NULL
154
- );
155
-
156
- -------------------------------------------------------------------------
157
- -- Step 4: copy menus
158
- -------------------------------------------------------------------------
159
- IF OBJECT_ID('dbo.Menus', 'U') IS NOT NULL AND NOT EXISTS (SELECT 1 FROM dbo.Menus)
160
- BEGIN
161
- INSERT INTO dbo.Menus (
162
- MenuCode, ParentMenuId, MenuName, MenuUrl, Icon,
163
- Visible, OrderNo, IsDeleted,
164
- CreatedById, CreatedAt, UpdatedById, UpdatedAt
165
- )
166
- OUTPUT
167
- inserted.MenuCode,
168
- inserted.MenuId
169
- INTO #MenuStage (OldMenuCode, NewMenuId)
170
- SELECT
171
- src.MenuCode,
172
- NULL,
173
- src.MenuName,
174
- src.MenuUrl,
175
- src.Icon,
176
- src.Visible,
177
- src.OrderNo,
178
- CASE WHEN src.DelFlag = 0 THEN 0 ELSE 1 END,
179
- TRY_CONVERT(bigint, src.CreatedUserId),
180
- src.CreatedDateTime,
181
- TRY_CONVERT(bigint, src.ModifiedUserId),
182
- src.ModifiedDateTime
183
- FROM dbo.MenuAdmins src
184
- WHERE src.DelFlag = 0;
185
-
186
- UPDATE stage
187
- SET stage.OldParentCode = src.ParentCode
188
- FROM #MenuStage stage
189
- INNER JOIN dbo.MenuAdmins src
190
- ON src.MenuCode = stage.OldMenuCode;
191
-
192
- UPDATE m
193
- SET ParentMenuId = parent.NewMenuId
194
- FROM dbo.Menus m
195
- INNER JOIN #MenuStage child
196
- ON child.NewMenuId = m.MenuId
197
- LEFT JOIN #MenuStage parent
198
- ON parent.OldMenuCode = NULLIF(LTRIM(RTRIM(child.OldParentCode)), '')
199
- WHERE NULLIF(LTRIM(RTRIM(child.OldParentCode)), '') IS NOT NULL
200
- AND LTRIM(RTRIM(child.OldParentCode)) <> '0';
201
- END
202
-
203
- -------------------------------------------------------------------------
204
- -- Step 5: copy permissions
205
- -------------------------------------------------------------------------
206
- IF OBJECT_ID('dbo.Permissions', 'U') IS NOT NULL AND NOT EXISTS (SELECT 1 FROM dbo.Permissions)
207
- BEGIN
208
- INSERT INTO dbo.Permissions (
209
- PermissionCode, MenuId, ActionName, ApiName, HttpMethod,
210
- Visible, OrderNo, IsDeleted,
211
- CreatedById, CreatedAt, UpdatedById, UpdatedAt
212
- )
213
- OUTPUT
214
- inserted.PermissionCode,
215
- inserted.PermissionId
216
- INTO #PermissionStage (OldPermissionCode, NewPermissionId)
217
- SELECT
218
- src.MenuDetailCode,
219
- m.NewMenuId,
220
- src.ActionName,
221
- src.ApiName,
222
- NULL,
223
- src.Visible,
224
- src.OrderNo,
225
- CASE WHEN src.DelFlag = 0 THEN 0 ELSE 1 END,
226
- TRY_CONVERT(bigint, src.CreatedUserId),
227
- src.CreatedDateTime,
228
- TRY_CONVERT(bigint, src.ModifiedUserId),
229
- src.ModifiedDateTime
230
- FROM dbo.MenuAdminDetails src
231
- INNER JOIN #MenuStage m
232
- ON m.OldMenuCode = src.ParentMenuCode
233
- WHERE src.DelFlag = 0;
234
-
235
- UPDATE stage
236
- SET stage.OldParentCode = src.ParentMenuCode
237
- FROM #PermissionStage stage
238
- INNER JOIN dbo.MenuAdminDetails src
239
- ON src.MenuDetailCode = stage.OldPermissionCode;
240
- END
241
-
242
- -------------------------------------------------------------------------
243
- -- Step 6: copy role assignments from the legacy table if it exists
244
- -------------------------------------------------------------------------
245
- IF OBJECT_ID('dbo.RoleMenus_Legacy', 'U') IS NOT NULL
246
- BEGIN
247
- INSERT INTO dbo.RoleMenus (
248
- RoleId, MenuId, IsDeleted,
249
- CreatedById, CreatedAt, UpdatedById, UpdatedAt
250
- )
251
- SELECT DISTINCT
252
- COALESCE(roleById.Id, roleByCode.Id) AS RoleId,
253
- menuStage.NewMenuId,
254
- 0,
255
- TRY_CONVERT(bigint, src.CreatedUserId),
256
- src.CreatedDateTime,
257
- TRY_CONVERT(bigint, src.ModifiedUserId),
258
- src.ModifiedDateTime
259
- FROM dbo.RoleMenus_Legacy src
260
- LEFT JOIN dbo.Roles roleById
261
- ON roleById.Id = src.RoleId
262
- AND roleById.IsDeleted <> 1
263
- LEFT JOIN dbo.Roles roleByCode
264
- ON roleByCode.Name = src.RoleCode
265
- AND roleByCode.IsDeleted <> 1
266
- INNER JOIN #MenuStage menuStage
267
- ON menuStage.OldMenuCode = src.MenuCode
268
- WHERE src.DelFlag = 0
269
- AND COALESCE(roleById.Id, roleByCode.Id) IS NOT NULL;
270
-
271
- INSERT INTO dbo.RolePermissions (
272
- RoleId, PermissionId, IsDeleted,
273
- CreatedById, CreatedAt, UpdatedById, UpdatedAt
274
- )
275
- SELECT DISTINCT
276
- COALESCE(roleById.Id, roleByCode.Id) AS RoleId,
277
- permStage.NewPermissionId,
278
- 0,
279
- TRY_CONVERT(bigint, src.CreatedUserId),
280
- src.CreatedDateTime,
281
- TRY_CONVERT(bigint, src.ModifiedUserId),
282
- src.ModifiedDateTime
283
- FROM dbo.RoleMenus_Legacy src
284
- LEFT JOIN dbo.Roles roleById
285
- ON roleById.Id = src.RoleId
286
- AND roleById.IsDeleted <> 1
287
- LEFT JOIN dbo.Roles roleByCode
288
- ON roleByCode.Name = src.RoleCode
289
- AND roleByCode.IsDeleted <> 1
290
- INNER JOIN #PermissionStage permStage
291
- ON permStage.OldPermissionCode = src.MenuCode
292
- WHERE src.DelFlag = 0
293
- AND COALESCE(roleById.Id, roleByCode.Id) IS NOT NULL;
294
-
295
- INSERT INTO dbo.RoleMenus (
296
- RoleId, MenuId, IsDeleted,
297
- CreatedById, CreatedAt, UpdatedById, UpdatedAt
298
- )
299
- SELECT DISTINCT
300
- COALESCE(roleById.Id, roleByCode.Id) AS RoleId,
301
- parentMenu.NewMenuId,
302
- 0,
303
- TRY_CONVERT(bigint, src.CreatedUserId),
304
- src.CreatedDateTime,
305
- TRY_CONVERT(bigint, src.ModifiedUserId),
306
- src.ModifiedDateTime
307
- FROM dbo.RoleMenus_Legacy src
308
- LEFT JOIN dbo.Roles roleById
309
- ON roleById.Id = src.RoleId
310
- AND roleById.IsDeleted <> 1
311
- LEFT JOIN dbo.Roles roleByCode
312
- ON roleByCode.Name = src.RoleCode
313
- AND roleByCode.IsDeleted <> 1
314
- INNER JOIN #PermissionStage permStage
315
- ON permStage.OldPermissionCode = src.MenuCode
316
- INNER JOIN #MenuStage parentMenu
317
- ON parentMenu.OldMenuCode = permStage.OldParentCode
318
- WHERE src.DelFlag = 0
319
- AND COALESCE(roleById.Id, roleByCode.Id) IS NOT NULL;
320
- END
321
-
322
- COMMIT TRANSACTION;
323
- END TRY
324
- BEGIN CATCH
325
- IF @@TRANCOUNT > 0
326
- ROLLBACK TRANSACTION;
327
-
328
- THROW;
329
- END CATCH;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
repair-manager-project-scope.sql DELETED
@@ -1,287 +0,0 @@
1
- /*
2
- Repair script for the current sample data set.
3
-
4
- Use this when:
5
- 1. The menu is visible, but Manager/Employee pages do not return data.
6
- 2. Task assignment is empty because the manager is not attached to any project rows.
7
- 3. "Can see page but cannot do anything" happens because the role lost update/list permissions.
8
-
9
- What this script does:
10
- - Rebuilds the Manager and Employee role menu + permission mappings.
11
- - Adds sample project memberships so TaskAssign and ProjectAssign have real project members.
12
-
13
- Assumptions:
14
- - You already have dbo.Roles, dbo.Users, dbo.Projects, dbo.Menus, dbo.Permissions,
15
- dbo.RoleMenus, dbo.RolePermissions, and dbo.ProjectMembers.
16
- - Your sample usernames follow the patterns mgr01..mgr10 and emp01..emp30.
17
- - Your projects already exist in dbo.Projects.
18
-
19
- This script is safe to run multiple times.
20
- */
21
-
22
- SET XACT_ABORT ON;
23
- BEGIN TRY
24
- BEGIN TRANSACTION;
25
-
26
- DECLARE @AdminRoleId bigint = (SELECT TOP (1) Id FROM dbo.Roles WHERE Name = N'Admin' AND IsDeleted = 0);
27
- DECLARE @ManagerRoleId bigint = (SELECT TOP (1) Id FROM dbo.Roles WHERE Name = N'Manager' AND IsDeleted = 0);
28
- DECLARE @EmployeeRoleId bigint = (SELECT TOP (1) Id FROM dbo.Roles WHERE Name = N'Employee' AND IsDeleted = 0);
29
-
30
- IF @ManagerRoleId IS NULL
31
- THROW 50001, 'Manager role not found.', 1;
32
-
33
- IF @EmployeeRoleId IS NULL
34
- THROW 50002, 'Employee role not found.', 1;
35
-
36
- -------------------------------------------------------------------------
37
- -- Permissions and menus used by the role/access UI
38
- -------------------------------------------------------------------------
39
- DECLARE @MenuProjectsId bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE MenuCode = N'PROJECTS');
40
- DECLARE @MenuTasksId bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE MenuCode = N'TASKS');
41
- DECLARE @MenuReportsId bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE MenuCode = N'REPORTS');
42
- DECLARE @MenuUsersId bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE MenuCode = N'USERS');
43
- DECLARE @MenuRolesId bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE MenuCode = N'ROLES');
44
-
45
- ;WITH PermissionSeed AS
46
- (
47
- SELECT N'Projects_List' AS PermissionCode, @MenuProjectsId AS MenuId, N'List' AS ActionName, N'api/Project' AS ApiName, N'GET' AS HttpMethod, 1 AS Visible, 10 AS OrderNo
48
- UNION ALL SELECT N'Projects_Create', @MenuProjectsId, N'Create', N'api/Project', N'POST', 1, 20
49
- UNION ALL SELECT N'Projects_Update', @MenuProjectsId, N'Update', N'api/Project', N'PUT', 1, 30
50
- UNION ALL SELECT N'Projects_Delete', @MenuProjectsId, N'Delete', N'api/Project', N'DELETE', 1, 40
51
- UNION ALL SELECT N'Tasks_List', @MenuTasksId, N'List', N'api/Task', N'GET', 1, 10
52
- UNION ALL SELECT N'Tasks_Create', @MenuTasksId, N'Create', N'api/Task', N'POST', 1, 20
53
- UNION ALL SELECT N'Tasks_Update', @MenuTasksId, N'Update', N'api/Task', N'PUT', 1, 30
54
- UNION ALL SELECT N'Tasks_Delete', @MenuTasksId, N'Delete', N'api/Task', N'DELETE', 1, 40
55
- UNION ALL SELECT N'Users_List', @MenuUsersId, N'List', N'api/User', N'GET', 1, 10
56
- UNION ALL SELECT N'Users_Create', @MenuUsersId, N'Create', N'api/User', N'POST', 1, 20
57
- UNION ALL SELECT N'Users_Update', @MenuUsersId, N'Update', N'api/User', N'PUT', 1, 30
58
- UNION ALL SELECT N'Users_Delete', @MenuUsersId, N'Delete', N'api/User', N'DELETE', 1, 40
59
- UNION ALL SELECT N'Roles_List', @MenuRolesId, N'List', N'api/Role', N'GET', 1, 10
60
- UNION ALL SELECT N'Roles_Create', @MenuRolesId, N'Create', N'api/Role', N'POST', 1, 20
61
- UNION ALL SELECT N'Roles_Update', @MenuRolesId, N'Update', N'api/Role', N'PUT', 1, 30
62
- UNION ALL SELECT N'Roles_Delete', @MenuRolesId, N'Delete', N'api/Role', N'DELETE', 1, 40
63
- )
64
- INSERT INTO dbo.Permissions
65
- (
66
- PermissionCode,
67
- MenuId,
68
- ActionName,
69
- ApiName,
70
- HttpMethod,
71
- Visible,
72
- OrderNo,
73
- IsDeleted,
74
- CreatedAt
75
- )
76
- SELECT
77
- p.PermissionCode,
78
- p.MenuId,
79
- p.ActionName,
80
- p.ApiName,
81
- p.HttpMethod,
82
- p.Visible,
83
- p.OrderNo,
84
- 0,
85
- SYSUTCDATETIME()
86
- FROM PermissionSeed p
87
- WHERE p.MenuId IS NOT NULL
88
- AND NOT EXISTS
89
- (
90
- SELECT 1
91
- FROM dbo.Permissions existing
92
- WHERE existing.PermissionCode = p.PermissionCode
93
- );
94
-
95
- -------------------------------------------------------------------------
96
- -- Rebuild role-menu mappings for Manager and Employee
97
- -------------------------------------------------------------------------
98
- IF @ManagerRoleId IS NOT NULL
99
- BEGIN
100
- DELETE FROM dbo.RoleMenus WHERE RoleId = @ManagerRoleId;
101
- END
102
-
103
- IF @EmployeeRoleId IS NOT NULL
104
- BEGIN
105
- DELETE FROM dbo.RoleMenus WHERE RoleId = @EmployeeRoleId;
106
- END
107
-
108
- ;WITH RoleMenuSeed AS
109
- (
110
- SELECT @ManagerRoleId AS RoleId, N'DASHBOARD' AS MenuCode
111
- UNION ALL SELECT @ManagerRoleId, N'PROJECTS'
112
- UNION ALL SELECT @ManagerRoleId, N'TASKS'
113
- UNION ALL SELECT @ManagerRoleId, N'REPORTS'
114
- UNION ALL SELECT @ManagerRoleId, N'USERS'
115
-
116
- UNION ALL SELECT @EmployeeRoleId, N'DASHBOARD'
117
- UNION ALL SELECT @EmployeeRoleId, N'PROJECTS'
118
- UNION ALL SELECT @EmployeeRoleId, N'TASKS'
119
- UNION ALL SELECT @EmployeeRoleId, N'REPORTS'
120
- )
121
- INSERT INTO dbo.RoleMenus
122
- (
123
- RoleId,
124
- MenuId,
125
- IsDeleted,
126
- CreatedAt
127
- )
128
- SELECT DISTINCT
129
- s.RoleId,
130
- m.MenuId,
131
- 0,
132
- SYSUTCDATETIME()
133
- FROM RoleMenuSeed s
134
- INNER JOIN dbo.Menus m
135
- ON m.MenuCode = s.MenuCode
136
- WHERE s.RoleId IS NOT NULL
137
- AND NOT EXISTS
138
- (
139
- SELECT 1
140
- FROM dbo.RoleMenus rm
141
- WHERE rm.RoleId = s.RoleId
142
- AND rm.MenuId = m.MenuId
143
- );
144
-
145
- -------------------------------------------------------------------------
146
- -- Rebuild role-permission mappings
147
- -------------------------------------------------------------------------
148
- IF @ManagerRoleId IS NOT NULL
149
- BEGIN
150
- DELETE FROM dbo.RolePermissions WHERE RoleId = @ManagerRoleId;
151
- END
152
-
153
- IF @EmployeeRoleId IS NOT NULL
154
- BEGIN
155
- DELETE FROM dbo.RolePermissions WHERE RoleId = @EmployeeRoleId;
156
- END
157
-
158
- ;WITH RolePermissionSeed AS
159
- (
160
- SELECT @ManagerRoleId AS RoleId, N'Projects_List' AS PermissionCode
161
- UNION ALL SELECT @ManagerRoleId, N'Projects_Update'
162
- UNION ALL SELECT @ManagerRoleId, N'Tasks_List'
163
- UNION ALL SELECT @ManagerRoleId, N'Tasks_Create'
164
- UNION ALL SELECT @ManagerRoleId, N'Tasks_Update'
165
- UNION ALL SELECT @ManagerRoleId, N'Users_List'
166
-
167
- UNION ALL SELECT @EmployeeRoleId, N'Projects_List'
168
- UNION ALL SELECT @EmployeeRoleId, N'Tasks_List'
169
- UNION ALL SELECT @EmployeeRoleId, N'Tasks_Update'
170
- )
171
- INSERT INTO dbo.RolePermissions
172
- (
173
- RoleId,
174
- PermissionId,
175
- IsDeleted,
176
- CreatedAt
177
- )
178
- SELECT DISTINCT
179
- s.RoleId,
180
- p.PermissionId,
181
- 0,
182
- SYSUTCDATETIME()
183
- FROM RolePermissionSeed s
184
- INNER JOIN dbo.Permissions p
185
- ON p.PermissionCode = s.PermissionCode
186
- WHERE s.RoleId IS NOT NULL
187
- AND NOT EXISTS
188
- (
189
- SELECT 1
190
- FROM dbo.RolePermissions rp
191
- WHERE rp.RoleId = s.RoleId
192
- AND rp.PermissionId = p.PermissionId
193
- );
194
-
195
- -------------------------------------------------------------------------
196
- -- Sample project membership seed
197
- -- This spreads managers and employees across the first 5 projects found.
198
- -------------------------------------------------------------------------
199
- ;WITH ProjectOrder AS
200
- (
201
- SELECT
202
- p.Id,
203
- ROW_NUMBER() OVER (ORDER BY p.Id) AS ProjectSlot
204
- FROM dbo.Projects p
205
- WHERE p.IsDeleted = 0
206
- ),
207
- MembershipSeed AS
208
- (
209
- SELECT N'mgr01' AS Username, 1 AS ProjectSlot UNION ALL
210
- SELECT N'mgr06', 1 UNION ALL
211
- SELECT N'emp01', 1 UNION ALL
212
- SELECT N'emp02', 1 UNION ALL
213
- SELECT N'emp03', 1 UNION ALL
214
- SELECT N'emp04', 1 UNION ALL
215
- SELECT N'emp05', 1 UNION ALL
216
- SELECT N'emp06', 1 UNION ALL
217
-
218
- SELECT N'mgr02', 2 UNION ALL
219
- SELECT N'mgr07', 2 UNION ALL
220
- SELECT N'emp07', 2 UNION ALL
221
- SELECT N'emp08', 2 UNION ALL
222
- SELECT N'emp09', 2 UNION ALL
223
- SELECT N'emp10', 2 UNION ALL
224
- SELECT N'emp11', 2 UNION ALL
225
- SELECT N'emp12', 2 UNION ALL
226
-
227
- SELECT N'mgr03', 3 UNION ALL
228
- SELECT N'mgr08', 3 UNION ALL
229
- SELECT N'emp13', 3 UNION ALL
230
- SELECT N'emp14', 3 UNION ALL
231
- SELECT N'emp15', 3 UNION ALL
232
- SELECT N'emp16', 3 UNION ALL
233
- SELECT N'emp17', 3 UNION ALL
234
- SELECT N'emp18', 3 UNION ALL
235
-
236
- SELECT N'mgr04', 4 UNION ALL
237
- SELECT N'mgr09', 4 UNION ALL
238
- SELECT N'emp19', 4 UNION ALL
239
- SELECT N'emp20', 4 UNION ALL
240
- SELECT N'emp21', 4 UNION ALL
241
- SELECT N'emp22', 4 UNION ALL
242
- SELECT N'emp23', 4 UNION ALL
243
- SELECT N'emp24', 4 UNION ALL
244
-
245
- SELECT N'mgr05', 5 UNION ALL
246
- SELECT N'mgr10', 5 UNION ALL
247
- SELECT N'emp25', 5 UNION ALL
248
- SELECT N'emp26', 5 UNION ALL
249
- SELECT N'emp27', 5 UNION ALL
250
- SELECT N'emp28', 5 UNION ALL
251
- SELECT N'emp29', 5 UNION ALL
252
- SELECT N'emp30', 5
253
- )
254
- INSERT INTO dbo.ProjectMembers
255
- (
256
- ProjectId,
257
- UserId,
258
- CreatedAt,
259
- CreatedBy
260
- )
261
- SELECT
262
- po.Id,
263
- u.Id,
264
- SYSUTCDATETIME(),
265
- NULL
266
- FROM MembershipSeed s
267
- INNER JOIN dbo.Users u
268
- ON u.Username = s.Username
269
- AND u.IsDeleted = 0
270
- INNER JOIN ProjectOrder po
271
- ON po.ProjectSlot = s.ProjectSlot
272
- WHERE NOT EXISTS
273
- (
274
- SELECT 1
275
- FROM dbo.ProjectMembers pm
276
- WHERE pm.ProjectId = po.Id
277
- AND pm.UserId = u.Id
278
- );
279
-
280
- COMMIT TRANSACTION;
281
- END TRY
282
- BEGIN CATCH
283
- IF @@TRANCOUNT > 0
284
- ROLLBACK TRANSACTION;
285
-
286
- THROW;
287
- END CATCH;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
reset-sample-role-access.sql DELETED
@@ -1,242 +0,0 @@
1
- /*
2
- Safe reset for the sample role/menu/permission setup.
3
-
4
- What this script fixes:
5
- - Admin gets the full menu tree.
6
- - Manager gets project/task/report menus with the correct permissions.
7
- - Employee gets the smaller scoped menu tree.
8
- - The page tree stays clickable because both parent menus and leaf pages are assigned.
9
-
10
- It also restores a few project memberships so Task Assign / Project Assign can show people.
11
-
12
- Run this only after your normalized menu/permission tables already exist.
13
- */
14
-
15
- SET NOCOUNT ON;
16
- SET XACT_ABORT ON;
17
-
18
- BEGIN TRANSACTION;
19
-
20
- DECLARE @AdminRoleId bigint = (SELECT TOP (1) Id FROM dbo.Roles WHERE Name = N'Admin' AND IsDeleted = 0);
21
- DECLARE @ManagerRoleId bigint = (SELECT TOP (1) Id FROM dbo.Roles WHERE Name = N'Manager' AND IsDeleted = 0);
22
- DECLARE @EmployeeRoleId bigint = (SELECT TOP (1) Id FROM dbo.Roles WHERE Name = N'Employee' AND IsDeleted = 0);
23
-
24
- IF @AdminRoleId IS NULL OR @ManagerRoleId IS NULL OR @EmployeeRoleId IS NULL
25
- BEGIN
26
- RAISERROR('One or more sample roles are missing. Expected Admin, Manager, Employee.', 16, 1);
27
- ROLLBACK TRANSACTION;
28
- RETURN;
29
- END
30
-
31
- IF COL_LENGTH('dbo.RoleMenus', 'MenuId') IS NULL OR COL_LENGTH('dbo.RolePermissions', 'PermissionId') IS NULL
32
- BEGIN
33
- RAISERROR('dbo.RoleMenus or dbo.RolePermissions does not look like the normalized schema yet.', 16, 1);
34
- ROLLBACK TRANSACTION;
35
- RETURN;
36
- END
37
-
38
- DECLARE @MenuDashboard bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE IsDeleted = 0 AND (MenuCode = N'DASHBOARD' OR MenuUrl = N'/dashboard'));
39
- DECLARE @MenuProjects bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE IsDeleted = 0 AND (MenuCode = N'PROJECTS' OR MenuUrl = N'/projects'));
40
- DECLARE @MenuProjectList bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE IsDeleted = 0 AND (MenuUrl = N'/projects/all' OR MenuName = N'Project List' OR MenuCode = N'PROJECT_LIST'));
41
- DECLARE @MenuProjectAssign bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE IsDeleted = 0 AND (MenuUrl = N'/projects/assign' OR MenuName = N'Project Assign' OR MenuCode = N'PROJECT_ASSIGN'));
42
-
43
- DECLARE @MenuTasks bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE IsDeleted = 0 AND (MenuCode = N'TASKS' OR MenuUrl = N'/tasks'));
44
- DECLARE @MenuTaskList bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE IsDeleted = 0 AND (MenuUrl = N'/tasks/all' OR MenuName = N'Task List' OR MenuCode = N'TASK_LIST'));
45
- DECLARE @MenuKanban bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE IsDeleted = 0 AND (MenuUrl = N'/board' OR MenuUrl = N'/projects/{ProjectId:long}/tasks' OR MenuName = N'Kanban Board' OR MenuCode = N'KANBAN_BOARD'));
46
- DECLARE @MenuTaskAssign bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE IsDeleted = 0 AND (MenuUrl = N'/tasks/assign' OR MenuName = N'Task Assign' OR MenuCode = N'TASK_ASSIGN'));
47
-
48
- DECLARE @MenuReports bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE IsDeleted = 0 AND (MenuCode = N'REPORTS' OR MenuUrl = N'/reports'));
49
- DECLARE @MenuProjectReport bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE IsDeleted = 0 AND (MenuUrl = N'/reports/projects' OR MenuName = N'Project Progress' OR MenuName = N'Project Progress Report' OR MenuCode = N'REPORT_PROJECTS'));
50
- DECLARE @MenuTaskReport bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE IsDeleted = 0 AND (MenuUrl = N'/reports/tasks' OR MenuName = N'Task Report' OR MenuCode = N'REPORT_TASKS'));
51
- DECLARE @MenuOverdueReport bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE IsDeleted = 0 AND (MenuUrl = N'/reports/overdue' OR MenuName = N'Overdue Tasks' OR MenuCode = N'REPORT_OVERDUE'));
52
- DECLARE @MenuTimesheetReport bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE IsDeleted = 0 AND (MenuUrl = N'/reports/timesheet' OR MenuName = N'Time Tracking' OR MenuName = N'Time Tracking Report' OR MenuCode = N'REPORT_TIMESHEET'));
53
- DECLARE @MenuEmployeeReport bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE IsDeleted = 0 AND (MenuUrl = N'/reports/employees' OR MenuName = N'Employee Report' OR MenuCode = N'REPORT_EMPLOYEES'));
54
-
55
- DECLARE @MenuUsers bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE IsDeleted = 0 AND (MenuCode = N'USERS' OR MenuUrl = N'/users'));
56
- DECLARE @MenuRoles bigint = (SELECT TOP (1) MenuId FROM dbo.Menus WHERE IsDeleted = 0 AND (MenuCode = N'ROLES' OR MenuUrl = N'/roles'));
57
-
58
- IF @MenuDashboard IS NULL OR @MenuProjects IS NULL OR @MenuTasks IS NULL OR @MenuReports IS NULL OR @MenuUsers IS NULL OR @MenuRoles IS NULL
59
- BEGIN
60
- RAISERROR('One or more top-level menus were not found. Check the seeded Menus table.', 16, 1);
61
- ROLLBACK TRANSACTION;
62
- RETURN;
63
- END
64
-
65
- IF @MenuProjectList IS NULL OR @MenuProjectAssign IS NULL OR @MenuTaskList IS NULL OR @MenuKanban IS NULL OR @MenuTaskAssign IS NULL
66
- OR @MenuProjectReport IS NULL OR @MenuTaskReport IS NULL OR @MenuOverdueReport IS NULL OR @MenuTimesheetReport IS NULL OR @MenuEmployeeReport IS NULL
67
- BEGIN
68
- RAISERROR('One or more child menus were not found. Check the seeded Menus table.', 16, 1);
69
- ROLLBACK TRANSACTION;
70
- RETURN;
71
- END
72
-
73
- -- Keep the list pages on their alias routes so they do not overlap with assign pages.
74
- UPDATE dbo.Menus
75
- SET MenuUrl = N'/projects/all'
76
- WHERE MenuId = @MenuProjectList
77
- AND ISNULL(MenuUrl, N'') <> N'/projects/all';
78
-
79
- UPDATE dbo.Menus
80
- SET MenuUrl = N'/tasks/all'
81
- WHERE MenuId = @MenuTaskList
82
- AND ISNULL(MenuUrl, N'') <> N'/tasks/all';
83
-
84
- DECLARE @ProjectsListPermissionId bigint = (SELECT TOP (1) PermissionId FROM dbo.Permissions WHERE IsDeleted = 0 AND PermissionCode = N'Projects_List');
85
- DECLARE @ProjectsCreatePermissionId bigint = (SELECT TOP (1) PermissionId FROM dbo.Permissions WHERE IsDeleted = 0 AND PermissionCode = N'Projects_Create');
86
- DECLARE @ProjectsUpdatePermissionId bigint = (SELECT TOP (1) PermissionId FROM dbo.Permissions WHERE IsDeleted = 0 AND PermissionCode = N'Projects_Update');
87
- DECLARE @ProjectsDeletePermissionId bigint = (SELECT TOP (1) PermissionId FROM dbo.Permissions WHERE IsDeleted = 0 AND PermissionCode = N'Projects_Delete');
88
- DECLARE @TasksListPermissionId bigint = (SELECT TOP (1) PermissionId FROM dbo.Permissions WHERE IsDeleted = 0 AND PermissionCode = N'Tasks_List');
89
- DECLARE @TasksCreatePermissionId bigint = (SELECT TOP (1) PermissionId FROM dbo.Permissions WHERE IsDeleted = 0 AND PermissionCode = N'Tasks_Create');
90
- DECLARE @TasksUpdatePermissionId bigint = (SELECT TOP (1) PermissionId FROM dbo.Permissions WHERE IsDeleted = 0 AND PermissionCode = N'Tasks_Update');
91
- DECLARE @TasksDeletePermissionId bigint = (SELECT TOP (1) PermissionId FROM dbo.Permissions WHERE IsDeleted = 0 AND PermissionCode = N'Tasks_Delete');
92
- DECLARE @UsersListPermissionId bigint = (SELECT TOP (1) PermissionId FROM dbo.Permissions WHERE IsDeleted = 0 AND PermissionCode = N'Users_List');
93
- DECLARE @UsersCreatePermissionId bigint = (SELECT TOP (1) PermissionId FROM dbo.Permissions WHERE IsDeleted = 0 AND PermissionCode = N'Users_Create');
94
- DECLARE @UsersUpdatePermissionId bigint = (SELECT TOP (1) PermissionId FROM dbo.Permissions WHERE IsDeleted = 0 AND PermissionCode = N'Users_Update');
95
- DECLARE @UsersDeletePermissionId bigint = (SELECT TOP (1) PermissionId FROM dbo.Permissions WHERE IsDeleted = 0 AND PermissionCode = N'Users_Delete');
96
- DECLARE @RolesListPermissionId bigint = (SELECT TOP (1) PermissionId FROM dbo.Permissions WHERE IsDeleted = 0 AND PermissionCode = N'Roles_List');
97
- DECLARE @RolesCreatePermissionId bigint = (SELECT TOP (1) PermissionId FROM dbo.Permissions WHERE IsDeleted = 0 AND PermissionCode = N'Roles_Create');
98
- DECLARE @RolesUpdatePermissionId bigint = (SELECT TOP (1) PermissionId FROM dbo.Permissions WHERE IsDeleted = 0 AND PermissionCode = N'Roles_Update');
99
- DECLARE @RolesDeletePermissionId bigint = (SELECT TOP (1) PermissionId FROM dbo.Permissions WHERE IsDeleted = 0 AND PermissionCode = N'Roles_Delete');
100
-
101
- IF @ProjectsListPermissionId IS NULL OR @TasksListPermissionId IS NULL OR @TasksUpdatePermissionId IS NULL
102
- OR @ProjectsCreatePermissionId IS NULL OR @ProjectsUpdatePermissionId IS NULL OR @ProjectsDeletePermissionId IS NULL
103
- OR @TasksCreatePermissionId IS NULL OR @TasksDeletePermissionId IS NULL
104
- OR @UsersListPermissionId IS NULL OR @UsersCreatePermissionId IS NULL OR @UsersUpdatePermissionId IS NULL OR @UsersDeletePermissionId IS NULL
105
- OR @RolesListPermissionId IS NULL OR @RolesCreatePermissionId IS NULL OR @RolesUpdatePermissionId IS NULL OR @RolesDeletePermissionId IS NULL
106
- BEGIN
107
- RAISERROR('One or more permissions were not found. Check the seeded Permissions table.', 16, 1);
108
- ROLLBACK TRANSACTION;
109
- RETURN;
110
- END
111
-
112
- DELETE FROM dbo.RoleMenus WHERE RoleId IN (@AdminRoleId, @ManagerRoleId, @EmployeeRoleId);
113
- DELETE FROM dbo.RolePermissions WHERE RoleId IN (@AdminRoleId, @ManagerRoleId, @EmployeeRoleId);
114
-
115
- INSERT INTO dbo.RoleMenus (RoleId, MenuId, IsDeleted, CreatedAt)
116
- SELECT @AdminRoleId, MenuId, 0, SYSUTCDATETIME()
117
- FROM (VALUES
118
- (@MenuDashboard),
119
- (@MenuProjects),
120
- (@MenuProjectList),
121
- (@MenuProjectAssign),
122
- (@MenuTasks),
123
- (@MenuTaskList),
124
- (@MenuKanban),
125
- (@MenuTaskAssign),
126
- (@MenuReports),
127
- (@MenuProjectReport),
128
- (@MenuTaskReport),
129
- (@MenuOverdueReport),
130
- (@MenuTimesheetReport),
131
- (@MenuEmployeeReport),
132
- (@MenuUsers),
133
- (@MenuRoles)
134
- ) AS V(MenuId);
135
-
136
- INSERT INTO dbo.RoleMenus (RoleId, MenuId, IsDeleted, CreatedAt)
137
- SELECT @ManagerRoleId, MenuId, 0, SYSUTCDATETIME()
138
- FROM (VALUES
139
- (@MenuDashboard),
140
- (@MenuProjects),
141
- (@MenuProjectList),
142
- (@MenuProjectAssign),
143
- (@MenuTasks),
144
- (@MenuTaskList),
145
- (@MenuKanban),
146
- (@MenuTaskAssign),
147
- (@MenuReports),
148
- (@MenuProjectReport),
149
- (@MenuTaskReport),
150
- (@MenuOverdueReport),
151
- (@MenuTimesheetReport)
152
- ) AS V(MenuId);
153
-
154
- INSERT INTO dbo.RoleMenus (RoleId, MenuId, IsDeleted, CreatedAt)
155
- SELECT @EmployeeRoleId, MenuId, 0, SYSUTCDATETIME()
156
- FROM (VALUES
157
- (@MenuDashboard),
158
- (@MenuProjects),
159
- (@MenuProjectList),
160
- (@MenuTasks),
161
- (@MenuTaskList),
162
- (@MenuKanban),
163
- (@MenuReports),
164
- (@MenuTaskReport),
165
- (@MenuTimesheetReport)
166
- ) AS V(MenuId);
167
-
168
- INSERT INTO dbo.RolePermissions (RoleId, PermissionId, IsDeleted, CreatedAt)
169
- SELECT @AdminRoleId, PermissionId, 0, SYSUTCDATETIME()
170
- FROM (VALUES
171
- (@ProjectsListPermissionId),
172
- (@ProjectsCreatePermissionId),
173
- (@ProjectsUpdatePermissionId),
174
- (@ProjectsDeletePermissionId),
175
- (@TasksListPermissionId),
176
- (@TasksCreatePermissionId),
177
- (@TasksUpdatePermissionId),
178
- (@TasksDeletePermissionId),
179
- (@UsersListPermissionId),
180
- (@UsersCreatePermissionId),
181
- (@UsersUpdatePermissionId),
182
- (@UsersDeletePermissionId),
183
- (@RolesListPermissionId),
184
- (@RolesCreatePermissionId),
185
- (@RolesUpdatePermissionId),
186
- (@RolesDeletePermissionId)
187
- ) AS V(PermissionId);
188
-
189
- INSERT INTO dbo.RolePermissions (RoleId, PermissionId, IsDeleted, CreatedAt)
190
- SELECT @ManagerRoleId, PermissionId, 0, SYSUTCDATETIME()
191
- FROM (VALUES
192
- (@ProjectsListPermissionId),
193
- (@ProjectsUpdatePermissionId),
194
- (@TasksListPermissionId),
195
- (@TasksCreatePermissionId),
196
- (@TasksUpdatePermissionId)
197
- ) AS V(PermissionId);
198
-
199
- INSERT INTO dbo.RolePermissions (RoleId, PermissionId, IsDeleted, CreatedAt)
200
- SELECT @EmployeeRoleId, PermissionId, 0, SYSUTCDATETIME()
201
- FROM (VALUES
202
- (@ProjectsListPermissionId),
203
- (@TasksListPermissionId),
204
- (@TasksUpdatePermissionId)
205
- ) AS V(PermissionId);
206
-
207
- DECLARE @ProjectIds TABLE (Slot int IDENTITY(1,1), ProjectId bigint);
208
- INSERT INTO @ProjectIds (ProjectId)
209
- SELECT TOP (5) Id
210
- FROM dbo.Projects
211
- WHERE IsDeleted = 0
212
- ORDER BY Id;
213
-
214
- IF (SELECT COUNT(*) FROM @ProjectIds) = 0
215
- BEGIN
216
- RAISERROR('No projects were found to attach sample members to.', 16, 1);
217
- ROLLBACK TRANSACTION;
218
- RETURN;
219
- END
220
-
221
- DELETE FROM dbo.ProjectMembers
222
- WHERE UserId IN (
223
- SELECT Id
224
- FROM dbo.Users
225
- WHERE IsDeleted = 0
226
- AND (Username LIKE N'mgr%' OR Username LIKE N'emp%')
227
- );
228
-
229
- INSERT INTO dbo.ProjectMembers (ProjectId, UserId, CreatedAt, CreatedBy)
230
- SELECT p.ProjectId, u.Id, SYSUTCDATETIME(), NULL
231
- FROM @ProjectIds p
232
- JOIN dbo.Users u
233
- ON u.IsDeleted = 0
234
- AND (
235
- (p.Slot = 1 AND u.Username IN (N'mgr01', N'mgr06', N'emp01', N'emp02', N'emp03', N'emp04', N'emp05', N'emp06'))
236
- OR (p.Slot = 2 AND u.Username IN (N'mgr02', N'mgr07', N'emp07', N'emp08', N'emp09', N'emp10', N'emp11', N'emp12'))
237
- OR (p.Slot = 3 AND u.Username IN (N'mgr03', N'mgr08', N'emp13', N'emp14', N'emp15', N'emp16', N'emp17', N'emp18'))
238
- OR (p.Slot = 4 AND u.Username IN (N'mgr04', N'mgr09', N'emp19', N'emp20', N'emp21', N'emp22', N'emp23', N'emp24'))
239
- OR (p.Slot = 5 AND u.Username IN (N'mgr05', N'mgr10', N'emp25', N'emp26', N'emp27', N'emp28', N'emp29', N'emp30'))
240
- );
241
-
242
- COMMIT TRANSACTION;