Appearance
控制
我们通过多种方式来控制用户的权限,可以精准的针对不同的用户来达到效果。
首先从权限维度来说,主要分为两方面: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,当设定产生冲突时,将会按照这个优先级进行处理。
注意 permission
、noPermission
必须要设定为数组的形式,不支持字符串的设定。
当调用 call
函数时,无法从 controlData
中获取 dom
和 view
的引用,因为此时可以通过 this
来进行访问。
dom
和 view
字段都是字符串,他们不做任何逻辑处理,只是保留了元素和视图的引用,以备在其他地方引用。
获取组件实例
同样是在组件的 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数组中
}