javascript - ExtJS 角色和权利概念
问题描述
我有一个带有角色和权限系统的应用程序。基本上我需要根据角色和权限设置显示和隐藏内容。
例如,我有一个具有静态字段的网格(无论角色和权限如何,所有用户都可以看到):
var grid_results_columns = [
{ text: 'CompanyName', dataIndex: 'CompanyName', flex: 1 },
{ text: 'Address', dataIndex: 'Address', flex: 1 },
{ text: 'System ID', dataIndex: 'SID', flex: 1 }
];
如果我想显示/隐藏一列,我会这样做:
if (settings.rights[0].HasShowAdminColumn) {
grid_results_columns.push({ text: 'AdminSetting', dataIndex: 'AdminSetting' });
}
这settings
是我使用 AJAX 从后端获得的 JSON。它具有权利数组,其中一个数组元素HasShowAdminColumn
可以为真或假(1 或 0)。
有很多角色、权利和网格需要修改。是否有任何自动化过程可以更轻松、更轻松地处理这个问题?否则,我将得到数千行代码,我必须检查每个角色和权限,并根据权限状态推送列。
解决方案
我会通过绑定到隐藏在列上来做到这一点。您可以在主视图模型数据属性上加载设置,并一直继承它。或者您可以在子组件中创建设置配置,将它们显式绑定到外部视图模型,然后在更新挂钩上将其设置为内部视图模型
Ext.define('MyGrid', {
extend: 'Ext.grid.Panel',
xtype: 'MyGrid',
viewModel: {
},
store: {
data: [{
name: 'Foo',
admin: 'Admin foo'
}]
},
columns: [{
dataIndex: 'name',
flex: 1,
text: 'name'
}, {
dataIndex: 'admin',
flex: 1,
text: 'admin',
hidden: true,
bind: {
hidden: '{!rights.showAdmin}'
}
}]
});
Ext.define('Main', {
extend: 'Ext.Container',
viewModel: {
rights: {}
},
controller: {
init: function() {
var vm = this.getViewModel();
//mimick ajax load
setTimeout(function(){
vm.set('rights', {showAdmin: true});
},3000);
}
},
layout: 'fit',
items: [{
xtype: 'MyGrid'
}]
});
Ext.application({
name : 'Fiddle',
launch : function() {
Ext.create('Main', {
width: 200,
height: 200,
renderTo: Ext.getBody()
});
}
});
推荐阅读
- date - 以日期类型为条件的 IFS 公式
- php - 如何在 laravel dom pdf 版本 0.7.0 中添加外部链接
- mysql - 如果同步到 Redshift/BigQuery,来自 MySQL 数据库的 bin 日志复制是否会保持唯一的约束?
- php - 如何自动关闭截断段落中的标签
- search - 禁用谷歌索引网站电话号码
- java - 如何让 Arduino 和 Java 通过单字节进行通信
- hbase - 在 HBase 中,更新记录或删除并插入新记录哪个更快
- android - allDocs之间的区别,在关系袋中找到性能
- ios - 使用蓝牙将数据从 carplay 应用程序传输到 iPhone 应用程序
- flutter - 我需要一个不重复的随机数生成器