权限管理场景示例
如何根据当前登录用户所在角色设置字段的可见权限
字段权限可在自定义代码加载数据方法中根据需求进行调整。
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);
}