Epicor页面根据不同权限显示不同的表格列


需求

一个查询报表中设计金额的列要设置一个单独权限,控制有权限的用户才能查看金额列,否则隐藏,,报表是用客制化+BAQ实现的

权限实现

权限判断

通过Epicor内置的权限配置,新增一个菜单权限值。规则如下[menuTag]_[数字]

后面的_数字需要为2的幂。后续可通过  value & 2 == 2 来判断用户是否拥有权限值2

Epicor页面根据不同权限显示不同的表格列

 

自定义权限获取函数:ZUserSecurity.GetAuthorizeValue

Epicor页面根据不同权限显示不同的表格列

C# 全选
// 获得权限集合
var secListSource = Db.Security.Where(w=>(String.IsNullOrEmpty(w.Company) || w.Company == this.callContextClient.CurrentCompany) && w.SecCode.StartsWith(this.MenuTag+"_")).ToList();

// 解析权限数据
var secList = secListSource.Select(s=>new {
  s.SecCode,
  AuthorizeValue = s.SecCode.Substring(s.SecCode.LastIndexOf("_")+1),
  EntryList = s.EntryList.Split(","),
  NoEntryList = s.NoEntryList.Split(","),
  s.SecurityMgr
 }).ToList();
 
 // 获得用户信息,包含角色,是否为全年管理员
 var useInfoSource = Db.SysUserFile.Where(w=>w.UserID==this.callContextClient.CurrentUserId).Select(s=>new {
  s.UserID,
  s.SecurityMgr,
  s.GroupList
 }).First();
 
  System.Text.StringBuilder sb = new System.Text.StringBuilder();
 
 var userIsSecurityMgr = useInfoSource.SecurityMgr;
 // 用户角色集合
 var userGroupList = useInfoSource.GroupList.Split("~").ToList();
 
 
 // 计算权限值
 int value = 0;
 foreach(var sec in secList) {
  sb.AppendLine($"seccode={sec.SecCode};value={sec.AuthorizeValue}");
  if(!int.TryParse(sec.AuthorizeValue,out var _val))
    continue;
  // 需要权限管理员  
  if(sec.SecurityMgr) {
    // 用户是否为权限管理与
    if(userIsSecurityMgr){  
      sb.AppendLine($"权限管理员,增加权限:{_val}");
      value = value | _val;
    }
    continue;
  }
  
  // 用户为权限管理员
  if(userIsSecurityMgr)  {
    sb.AppendLine($"权限管理员,增加权限:{_val}");
    value = value | _val;
    continue;
  }
  
  // 如果默认是allow,判断是否有dis的权限
  if(sec.EntryList.Contains("*")) {
    if(sec.NoEntryList.Intersect(userGroupList).Count() > 0){
      // 存在dis的配置,没有权限
      continue;
    }
    sb.AppendLine($"默认是allow,没有dis,增加权限:{_val}");
    value = value | _val;
    continue;
  }
  // 如果其他啊,有allow就代表有
  else {
    if(sec.EntryList.Intersect(userGroupList).Count() > 0) {
      var str1 = String.Join(",",userGroupList);
      var str2 = String.Join(",",sec.EntryList);
      sb.AppendLine($"默认是非allow,存在allow,增加权限:{_val},SecEntryList={str2},userGroupList={str1}");
      value = value | _val;
    }
    continue;
  }
 }
 
 this.AuthorizeValue = value;
 

sb.AppendLine($"company={ this.callContextClient.CurrentCompany }");
sb.Append($"currentID={ this.callContextClient.CurrentUserId }");

this.Message = sb.ToString();
 
 

返回如下:

Epicor页面根据不同权限显示不同的表格列

同时支持多个权限,通过 value & 2 == 2来判断是否拥有某个权限

 

根据权限隐藏grid中的列

因为界面获取到权限后,要根据权限来隐藏grid中的列。因此如果在onload中,由于grid还没有渲染,对grid列的操作可能会失效的。因此需要在grid的create事件中实现

Epicor页面根据不同权限显示不同的表格列

事件触发方式

Epicor页面根据不同权限显示不同的表格列

 

kinetic-function设置如下:

Epicor页面根据不同权限显示不同的表格列

row-update设置如下:

Epicor页面根据不同权限显示不同的表格列

权限判断

Epicor页面根据不同权限显示不同的表格列

如通没有权限,就隐藏指定列

Epicor页面根据不同权限显示不同的表格列

第一个property-set是设置grid的guid,避免因为grid用户个性化列的设置引起列冲突,

用户自定义的表格个性化配置可在sql中查询。key3为表格的guid

SQL 全选
select top 200 * from [Ice].[XXXDef] where key3 = 'd93c7f28-778d-4d66-8b2b-fabf7b2c1fc1'

Epicor页面根据不同权限显示不同的表格列

第二个property-set是设置需要隐藏的列

Epicor页面根据不同权限显示不同的表格列

其实就是设置表格的gridModel.columnsHidden属性

最后调用grid-schema-invalidate

Epicor页面根据不同权限显示不同的表格列

配合规则使用效果更佳:

Epicor页面根据不同权限显示不同的表格列

添加规则后,如果用户强行把隐藏列给显示出来,界面上这些列会强制显示一篇看空白的。比如

Epicor页面根据不同权限显示不同的表格列

但是这个并不会影响后台返回的数据,后台返回数据还是完整的返回

Epicor页面根据不同权限显示不同的表格列

因此可能存在数据泄密风险,所以我们可以写两个不同权限的BAQ,通过不同BAQ来达到后台返回数据不同

Epicor页面根据不同权限显示不同的表格列

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
张国生
上一篇:密码过期问题跟踪
下一篇:没有了
评论列表

发表评论

评论内容
昵称:
关联文章

Epicor页面根据不同权限显示不同表格
权限配置
AgGrid显示垂直竖向线条
AG-Grid 显示分割线,竖线
不同页面之间通讯交互数据;明细页保存后刷新A页面数据
前台页面自定义权限值判断
不同状态显示不同样式 cellRendererFramework
Devexpress 表格GridViewRepositoryItemPictureEdit异步加载远程URL图片
【JOC】不同页面/组件之间通讯交互数据
权限指令v-permission
ASP.NET Core MVC 在过滤器ActionFilter中保存页面生成html静态页面文件
Devexpress gridControl SummaryItem显示格式化设置DisplayFormat
agGrid自定义显示格式cellRenderer
SqlServer PIVOT函数快速实现行转,UNPIVOT实现转行
DevExpress表格GridControl添加操作单元格添加图片按钮并且实现点击链接URL跳转浏览器
YESWinform开发框架关于模块功能不同权限布局介绍
Epicor解决方案 项目类型说明
AgGrid表格编辑功能
agGrid修改数据源后,表格显示不刷新
AgGrid Options宽度计算

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码