跳转至

权限管理场景示例

如何根据当前登录用户所在角色设置字段的可见权限

字段权限可在自定义代码加载数据方法中根据需求进行调整。

protected override void OnLoad(H3.SmartForm.LoadSmartFormResponse response)
{
    base.OnLoad(response);
    H3.Organization.OrgRole[] _userRoles = this.Request.Engine.Organization.GetUserRoles(this.Request.UserContext.UserId, false); // 获取当前登录用户所有角色
    bool _flag = false;
    if(_userRoles != null)
    {
        foreach(H3.Organization.OrgRole _userRole in _userRoles)
        {
            if(_userRole.Name == "系统管理员") // 判断当前登录角色
            {
                _flag = true;
                break;
            }
        }
    }
    if(_flag)
    {
        response.ReturnData["F0000001"].Visible = false; // 设置字段不可见
        response.ReturnData["F0000002"].Editable = false; // 设置字段不可写
    }
}

获取指定角色的数据权限与功能权限

以下代码用于获取指定角色的数据权限和功能权限。

Dictionary<string, H3.Acl.FunctionAcl[]> aclDict = this.Engine.FunctionAclManager.GetRoleAcls(new string[] {"roleId"});
H3.Acl.FunctionAcl[] acls = aclDict["roleId"];
foreach(H3.Acl.FunctionAcl acl in acls)
{
    // acl.FunctionCode 表示对应的表单权限
    // acl.RoleId 表示对应的角色权限
    // acl.ListViewActions 表示列表有权限的按钮
    // acl.FormActions 表示表单有权限的按钮
    // acl.ScopeType 表示该角色在表单的数据权限范围
}

更新指定角色对指定表单的权限

以下代码用于更新指定角色在指定表单的权限。

string functionNode = "表单编码";
string roleId = "具体的 RoleId";
H3.Acl.FunctionAcl[] acls = this.Engine.FunctionAclManager.GetFunctionAcls(functionNode);
foreach(H3.Acl.FunctionAcl acl in acls)
{
    // acl.FunctionCode 表示对应的表单权限
    // acl.RoleId 表示对应的角色权限
    // acl.ListViewActions 表示列表有权限的按钮
    // acl.FormActions 表示表单有权限的按钮
    // acl.ScopeType 表示该角色在表单的数据权限范围
    if(acl.RoleId != roleId)
    {
        continue;
    }
    List<string> formActionList = new List<string>(acl.FormActions);
    // 添加打印按钮权限
    if(!formActionList.Contains("Print"))
    {
        formActionList.Add("Print");
    }
    this.Engine.FunctionAclManager.UpdateAcl(acl);
}