🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 一、概述 平台支持按字段权限;包括列表中的字段显示和表单中的字段显示;它控制了某个角色获得授权的受控字段,在需要做字段管控的业务中,这个设定将生效,如果压根不需要管控的业务,则这个设定没什么意义了; 所有的需要管控的字段,都需要先定义为字段权限项,然后赋值授权给指定角色;通过这种定义方式,就能得到某个账号得到含有受控字段的**实体内**授权的字段; ### **管理界面** ![](https://img.kancloud.cn/0d/3a/0d3a84972462349268c4f112a5ccaea9_1366x657.png) ## 二、数据来源 在业务包中,增加一个针对某个字段项(实体内)的字段权限定义类,举例如下; ``` @RayFieldLimitDefinition(value = { // @RayFieldLimitDefinitionEntityField(containerGroup = "系统管理", containerLabel = "账号管理", containerEntityClazz = "org.ray.framework.system.dao.entity.SysStaff", fieldLabel = "密码", fieldName = "initPassword")// }) public class RayFrameworkFieldLimitDefinition { } ``` >[danger] 这种数据配置类可以无限增加,系统启动的时候,会依据注解扫描; ## 三、业务使用 ### **后端代码** 后端业务代码中,通过api访问,获得当前账号在当前实体中已授权的受控字段范围; ``` @Autowired private SharedStaffLimitService sharedStaffLimitService; List<String> authorizedFields = sharedStaffLimitService.authorizedControlledFieldsOfSpecEntity(model.getCurLoginData().getCurStaffId(),"org.ray.framework.system.dao.entity.SysVip"); ``` 如果一个接口中,用到了多个实体的字段,那么,需要将他们合并起来,一同赋值到curAuthorizedControlledField字段; 实例: ``` model.setCurAuthorizedControlledField(sharedStaffLimitService.authorizedControlledFieldsOfSpecEntity(model.getCurLoginData().getCurStaffId(), "org.ray.framework.system.dao.entity.SysStaff")); ``` ### **前端代码** 前端先约定好受控字段名,获取到后端提供的接口中已授权的字段名称,约定的字段与接口中返回的已授权字段比对,能找到的,则是已授权,必须显示,否则就隐藏; > 注意: > 1、接口返回字段curAuthorizedControlledField中以数组形式存放当前已授权字段; > 2、比对的字段标识符,为权限定义的时候,字段名数据项;