Dynamic AX 4.0 用户组权限SecurityKey

 1 UserId              _userId = "IT001";
 2 UserGroupId      _userGroupId = "ABC_1";
 3 DomainId          _domainId="DH";
 4 DataAreaId        _companyId = "CG";
 5 SecurityKeyset    _SecurityKeyset;
 6 AccessType        _newAccessType = AccessType::Edit;
 7 AccessType        _curAccessType;
 8 str                    _MenuItemName = "SalesTable";
 9 ;
10 
11 _SecurityKeyset = new SecurityKeyset();
12 //begin user group security set
13 _SecurityKeyset .loadGroupRights(_userGroupId ,_domainId);
14 //获取销售单画面的访问权限
15 _curAccessType = _SecurityKeyset.menuItemAccess(_MenuItemName , AccessRecordType::MenuItemDisplay);
16      
17 //给销售单画面赋权限
18 _SecurityKeyset.menuItemAccess(_MenuItemName , AccessRecordType::MenuItemDisplay,_newAccessType ); //带第三个参数表示修改权限。
19 //Save 权限
20 xAccessRightsList::saveSecurityRights(se.packTouched(),_userGroupId , _domainId);
21 
22 //begin user group security set
23 _SecurityKeyset .loadUserRights(_userId,_companyId );
24 //获取用户销售单画面的访问权限
25 _curAccessType = _SecurityKeyset.menuItemAccess(_MenuItemName , AccessRecordType::MenuItemDisplay);
26  

若想将一个用户组的权限完全复制给另外一个用户组。

 1 SecurityKeyset    seSource;
 2 
 3 UserGroupId      groupSource,groupDest;
 4 DomainId          domainId = "DH";
 5 ;
 6 groupSource = "Test1";
 7 groupDest ="Test2";
 8 seSource = new SecurityKeyset(); 
 9 seSource.loadGroupRights(groupSource,domainId);
10 
11 xAccessRightsList::saveSecurityRights(seSource.pack(), groupDest, domainId );//复制到新组Test2

扩展一下,可以得到某对象所有用户组的权限,并导出到Excel,以供IT审计。这在权限检查中非常有用,节省一个个打开看的时间了。

另,在后头涉及到权限的tableAccessRightsList, 同时我们可以做一个hotfix,加一个新的tableAccessRightsListLog,记录用户对权限的修改,以便后面追查。

tableAccessRightsListLog表结构。

CREATE TABLE [dbo].[ACCESSRIGHTSLISTLOG](
    [GROUPID] [nvarchar](10) NULL,
    [DOMAINID] [nvarchar](10) NULL,
    [RECORDTYPE] [int] NULL,
    [PARENTID] [int] NULL,
    [ID] [int] NULL,
    [ELEMENTNAME] [nvarchar](40) NULL,
    [ACCESSTYPE] [int] NULL,
    [ACCESSTYPEFKEYUSE] [int] NULL,
    [MODIFIEDDATE] [datetime] NULL,
    [MODIFIEDTIME] [int] NULL,
    [MODIFIEDBY] [nvarchar](5) NULL,
    [CREATEDDATE] [datetime] NULL,
    [CREATEDTIME] [int] NULL,
    [CREATEDBY] [nvarchar](5) NULL,
    [RECVERSION] [int] NULL,
    [RECID] [bigint] NULL,
    [USERID] [nvarchar](10) NULL,
    [LOGTYPE] [nvarchar](3) NULL,
    [LOGDATE] [datetime] NULL
)

附AccessRightsListRecordType的枚举值列表。

附AccessRightsListAccessType的枚举值列表。

原文地址:https://www.cnblogs.com/sxypeace/p/5439825.html