EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:显示允许读取对象的用户列表

本主题演示如何创建一个动作以显示其角色允许读取特定对象的用户列表。

  1. 使用PopupWindowShowAction创建一个视图控制器。此操作在弹出窗口中显示用户列表。
  2. CustomizePopupWindowParams事件处理程序中,使用GetSecurityStrategy(XafApplication)方法获取安全策略实例。
  3. 获取ListView的对象空间,并使用其CreateListView(Type,Boolean)方法为用户对象创建一个新的List View。
  4. 使用IObjectSpace.GetObjects <T>()方法获取所有用户的列表。
  5. 若要检查每个用户是否具有允许读取目标对象的权限,请使用CanReadByUser(SecurityStrategy,IPermissionPolicyUser,Object,String)方法。
  6. 自定义列表视图的集合源,并将CustomizePopupWindowParamsEventArgs.View属性设置为创建的列表视图。
using System;
using System.Collections.Generic;
using DevExpress.Data.Filtering;
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Actions;
using DevExpress.ExpressApp.Security;
using DevExpress.Persistent.Base;
using DevExpress.Persistent.BaseImpl.PermissionPolicy;
// ...
public class DisplayUsersWithObjectAccessController : ViewController<DetailView> {
    PopupWindowShowAction displayUsersAction;
    public DisplayUsersWithObjectAccessController() : base() {
        displayUsersAction = new PopupWindowShowAction(this, "DisplayUsersWithObjectAccess", PredefinedCategory.View);
        displayUsersAction.ImageName = "Context_Menu_Show_In_Popup";
        displayUsersAction.CustomizePopupWindowParams  = DisplayUsersAction_CustomizePopupWindowParams;
    }
    private void DisplayUsersAction_CustomizePopupWindowParams(object sender, CustomizePopupWindowParamsEventArgs e) {
        Type userType = typeof(PermissionPolicyUser);
        ListView listView = Application.CreateListView(userType, true);
        SecurityStrategy securityStrategy = Application.GetSecurityStrategy();
        List<IPermissionPolicyUser> users = new List<IPermissionPolicyUser>();
        IObjectSpace objectSpace = listView.ObjectSpace;
        foreach (IPermissionPolicyUser user in objectSpace.GetObjects<PermissionPolicyUser>()) {
            if (securityStrategy.CanReadByUser(user, View.CurrentObject)) {
                users.Add(user);
            }
        }
        listView.CollectionSource.Criteria["UsersWithObjectAccess"] = new InOperator(objectSpace.GetKeyPropertyName(userType), users);
        e.View = listView;
    }
}

下图显示了结果:

注意

请参阅IsGrantedExtensions类说明,以查看检查用户或角色权限的其他方法。

相关文章

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