Javascript ExtJS角色和权限概念

Javascript ExtJS角色和权限概念,javascript,extjs,Javascript,Extjs,我有一个带有角色和权限系统的应用程序。基本上,我需要根据角色和权限设置显示和隐藏内容 例如,我有一个网格,它的静态字段对所有用户都可见,而不考虑角色和权限属性: var grid_results_columns = [ { text: 'CompanyName', dataIndex: 'CompanyName', flex: 1 }, { text: 'Address', dataIndex: 'Address', flex: 1 }, { text: 'System

我有一个带有角色和权限系统的应用程序。基本上,我需要根据角色和权限设置显示和隐藏内容

例如,我有一个网格,它的静态字段对所有用户都可见,而不考虑角色和权限属性:

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' });
}
设置是使用AJAX从后端获取的JSON。它具有权限数组,其中一个数组元素是HasShowAdminColumn,它可以是true或false 1或0


有太多的角色、权限和网格需要修改。是否有任何自动化流程可以更轻松、更少痛苦地处理此问题?否则,我会有上千行代码,我必须检查每个角色和权限,并根据权限状态推送列。

我会使用隐藏在列上的绑定来完成。您可以加载主viewmodel数据属性上的设置,并一直继承它。或者,您可以在子组件中创建设置配置,将它们显式绑定到outter viewmodel,并在更新挂钩上将其设置为内部viewmodel

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()
        });
    }
});

您正在使用哪个版本的ExtJS?ExtJS 6,但没有CMD。