EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:在列表视图中隐藏“受保护的内容”列,在详细信息视图中隐藏属性编辑器

本主题介绍如何使用条件外观模块来隐藏安全系统禁止的列表视图列和详细视图属性编辑器,并显示“受保护的内容”占位符。如果要在ORM级别过滤掉“受保护的内容”记录,则可以另外使用“如何:将客户端安全模式从UI级别更改为XPO应用程序中的集成”示例。

注意

移动平台不支持本主题中描述的方法。

  • 将条件外观模块添加到与平台无关的模块项目(如果之前未添加)。为此,调用“模块设计器”或“应用程序设计器”,并将ConditionalAppearanceModule项目从“工具箱”拖到“模块”面板。在设计器中进行更改后,请确保重建您的解决方案。
  • 在与平台无关的模块项目中实现以下Controller类。

    using DevExpress.ExpressApp;
    using DevExpress.ExpressApp.Editors;
    using DevExpress.ExpressApp.ConditionalAppearance;
    // ...
    public class HideProtectedContentController : ViewController<ObjectView> {
        private AppearanceController appearanceController;
        protected override void OnActivated() {
            base.OnActivated();
            appearanceController = Frame.GetController<AppearanceController>();
            if(appearanceController != null) {
                appearanceController.CustomApplyAppearance  = appearanceController_CustomApplyAppearance;
            }
        }
        protected override void OnDeactivated() {
            if(appearanceController != null) {
                appearanceController.CustomApplyAppearance -= appearanceController_CustomApplyAppearance;
            }
            base.OnDeactivated();
        }
        void appearanceController_CustomApplyAppearance(object sender, ApplyAppearanceEventArgs e) {
            if(e.AppearanceObject.Visibility == null || e.AppearanceObject.Visibility == ViewItemVisibility.Show) {
                if(View is ListView) {
                    if(e.Item is ColumnWrapper) {
                        if(!DataManipulationRight.CanRead(View.ObjectTypeInfo.Type,
                            ((ColumnWrapper)e.Item).PropertyName, null,
                            ((ListView)View).CollectionSource, View.ObjectSpace)) {
                            e.AppearanceObject.Visibility = ViewItemVisibility.Hide;
                        }
                    }
                }
                if(View is DetailView) {
                    if(e.Item is PropertyEditor) {
                        if(!DataManipulationRight.CanRead(View.ObjectTypeInfo.Type,
                            ((PropertyEditor)e.Item).PropertyName,
                            e.ContextObjects.Length > 0 ? e.ContextObjects[0] : null, null,
                            View.ObjectSpace)) {
                            e.AppearanceObject.Visibility = ViewItemVisibility.Hide;
                        }
                    }
                }
            }
        }
    }
    
注意
  • 在复杂的情况下,HideProtectedContentController可能会对应用程序性能产生负面影响。
  • 列表视图列的隐藏状态保留在用户模型差异中。因此,如果最终将授予对某个属性的访问权限,则需要手动调整或重置视图模型。

转载保留此链接,注明出处