Skip to content

控制

我们通过多种方式来控制用户的权限,可以精准的针对不同的用户来达到效果。

首先从权限维度来说,主要分为两方面:1. 用户拥有的角色,2. 动态配置的code

再从控制的手段来说,也主要分为两方面:1. 操作视图,2. 操作dom元素

由于有交叉部分,并且还有很多细化的地方,因此我们按照实现方式来对此进行说明。

权限控制

每个组件可配置 control 属性对象,其中的 if 属性是个方法,通过返回值的 true 和 false 来控制组件的显示及隐藏。

js
{
  if:function(){
     //控制元素显示与隐藏
     return true;
  },
  code: 'wenzhong',
  permission: ['roleA', 'roleC'],
  noPermission: ['roleM'],
  call: function() {
     //组件渲染完毕,可以执行操作
  }
}
{
  if:function(){
     //控制元素显示与隐藏
     return true;
  },
  code: 'wenzhong',
  permission: ['roleA', 'roleC'],
  noPermission: ['roleM'],
  call: function() {
     //组件渲染完毕,可以执行操作
  }
}

code 我们在访问不同的页面的时候,可能会根据配置的不同,以及接口返回的数据不同,把得到的一个或多个 code值存储起来,每个页面都可能是不一样的 code[]组,当解析该数据视图的时候,会根据当前设定的 code去对应的 code[]组里面去查找,如果找到则进行渲染,如果找不到,则直接跳过该数据视图。

permission 用户在登录成功之后,会获取到配置的对应角色组 roles[],我们可以为permission字段设定具有一个或多个值的权限组 permission[],

如果 permission中的至少一个字段能够在 roles中找到,那么就会进行渲染,否则直接跳过该数据视图。

noPermission 我们可以为noPermission字段设定具有一个或多个值的无权限组 noPermission[],如果 noPermission[]中的至少一个字段能够在角色组 roles中找到,那么就表示该角色无权渲染该数据视图,将会直接跳过,否则一个都未找到的话,那么才会进行渲染。

提示: code、permission、noPermission、if可以同时存在,但是他们之间有一个优先级的关系,因此设置的时候尽量不要冲突,如 permission设定为 [roleA],noPermission也设定为 [roleA],那么 noPermission将不会生效,他们之间的优先级关系为: code > permission > noPermission > if,当设定产生冲突时,将会按照这个优先级进行处理。

注意 permissionnoPermission必须要设定为数组的形式,不支持字符串的设定。

当调用 call函数时,无法从 controlData中获取 domview的引用,因为此时可以通过 this来进行访问。

domview字段都是字符串,他们不做任何逻辑处理,只是保留了元素和视图的引用,以备在其他地方引用。

获取组件实例

同样是在组件的 control 属性对象中配置 dom 如上面的 dom 配置

js
{
  dom:'elbtn',//当前组件的 ref 实例会添加到 this.controlData.elbtnDom数组中
  view:'elbtn',//当前组件的 数据视图 会添加到 this.controlData.elbtnView数组中
}
{
  dom:'elbtn',//当前组件的 ref 实例会添加到 this.controlData.elbtnDom数组中
  view:'elbtn',//当前组件的 数据视图 会添加到 this.controlData.elbtnView数组中
}