Add Administration user management: list, password reset, email change, group assignments
Playwright Tests / test (push) Canceled after 0s

Wires the previously-unused fis_admin_* user/group stored procs into the Admin
module (fds_sys-gated), adds a users grid with a per-row ribbon (reset
password, change email, manage group membership), and always emails a
password reset result to the user rather than showing it to the admin.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-09 10:34:04 +02:00
co-authored by Claude Sonnet 5
parent 6c38ee3d55
commit a5f497090e
14 changed files with 740 additions and 8 deletions
+1
View File
@@ -223,6 +223,7 @@
<Build Include="dbo\Functions\json_diffObjectArrays.sql" />
<Build Include="dbo\Functions\json_compareObjectArrays.sql" />
<Build Include="dbo\Functions\fis_getONEPersonWidgets.sql" />
<Build Include="dbo\Functions\fis_admin_getUserGroupMembership.sql" />
<Build Include="dbo\Functions\fis_admin_getUserGroupList.sql" />
<Build Include="dbo\Functions\fis_admin_getUserAccountList.sql" />
<Build Include="dbo\Functions\fis_admin_getUserAccount_Namelist.sql" />
@@ -0,0 +1,33 @@
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION [dbo].[fis_admin_getUserGroupMembership]
(
@authaccount varchar(5)
, @useraccount_id varchar(5)
)
RETURNS @RET TABLE ( [usergroup_id] varchar(5), [name] nvarchar(255) null, [member] bit, [order] int)
AS
BEGIN
DECLARE @auth smallint = [dbo].[fis_admin_getUserAuth](@authaccount);
IF @auth > 1
BEGIN
INSERT INTO @RET
SELECT ug.[usergroup_id]
,CAST(DECRYPTBYKEY(ug.[name_enc]) as nvarchar(255))
,'member' = CASE WHEN ugm.[useraccount_id] is not null THEN 1 ELSE 0 END
,'order' = ROW_NUMBER() OVER (ORDER BY CAST(DECRYPTBYKEY(ug.[name_enc]) as nvarchar(255)))
FROM [dbo].[fis_usergroups] as ug
LEFT JOIN [dbo].[fis_usergroups_members] as ugm ON ugm.[usergroup_id] = ug.[usergroup_id]
AND ugm.[useraccount_id] = @useraccount_id AND ugm.[DateDeleted] is null
WHERE ug.[DateDeleted] is null;
END
RETURN;
END
@@ -10,6 +10,7 @@ CREATE PROCEDURE [dbo].[fis_admin_resetUserPassword]
@authaccount varchar(10)
,@useraccount_id varchar(10)
,@enc_key uniqueidentifier
,@newpassword nvarchar(20) = NULL /* admin-supplied password; when NULL a random one is generated */
AS
BEGIN
SET NOCOUNT ON;
@@ -17,19 +18,23 @@ BEGIN
DECLARE @utcnow datetime = GETUTCDATE();
DECLARE @auth smallint = [dbo].[fis_admin_getUserAuth](@authaccount);
DECLARE @newpassword nvarchar(20) = [dbo].[ocms_fn_generatePassword] (8, 0, 1, 1);
IF @newpassword IS NULL
BEGIN
SET @newpassword = [dbo].[ocms_fn_generatePassword] (8, 0, 1, 1);
END
IF @auth > 1 OR @authaccount = @useraccount_id
BEGIN
UPDATE [dbo].[fis_useraccounts]
SET [password_enc] = ENCRYPTBYKEY(@enc_key, @newpassword)
, [DateModified] = GETUTCDATE()
, [UserModified] = @authaccount
WHERE [useraccount_id] = @useraccount_id AND [dateDeleted] is null;
SELECT CAST(CASE WHEN DECRYPTBYKEY((SELECT TOP(1) [password_enc] FROM [dbo].[fis_useraccounts] WHERE [useraccount_id] = @useraccount_id)) = @newpassword THEN 1 ELSE 0 END as bit);
SELECT CAST(CASE WHEN DECRYPTBYKEY((SELECT TOP(1) [password_enc] FROM [dbo].[fis_useraccounts] WHERE [useraccount_id] = @useraccount_id)) = @newpassword THEN 1 ELSE 0 END as bit) as [success]
, @newpassword as [newpassword];
END