EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:为Active Directory组的所有用户分配相同的权限

AuthenticationActiveDirectory身份验证类型不支持Active Directory安全组开箱。本主题演示如何将XAF安全角色映射到AD组。用户首次登录时,将自动分配名称与该用户的AD组名称匹配的现有角色。如果修改了AD组中的用户成员身份,则相关角色集合将在下一次登录时进行相应更新。

注意

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

  • 模块项目中,引用提供UserPrincipal类的System.DirectoryServices.AccountManagement.dll程序集。
  • 继承AuthenticationActiveDirectory并重写 AuthenticationActiveDirectory.Authenticate方法:

    using System.DirectoryServices.AccountManagement;
    using DevExpress.Data.Filtering;
    using DevExpress.ExpressApp;
    using DevExpress.ExpressApp.Security;
    using DevExpress.Persistent.BaseImpl.PermissionPolicy;
    // ...
    public class CustomAuthenticationActiveDirectory : AuthenticationActiveDirectory { 
        public override object Authenticate(IObjectSpace objectSpace) { 
            string userName = GetUserName(); 
            PermissionPolicyUser user = objectSpace.FindObject<PermissionPolicyUser>(new BinaryOperator("UserName", userName)); 
            if(user == null) { 
                if(CreateUserAutomatically) { 
                    user = objectSpace.CreateObject<PermissionPolicyUser>(); 
                    user.UserName = userName; 
                }                 
            } 
            if(user != null) { 
                foreach(PermissionPolicyRole role in user.Roles.ToArray()) { 
                    if(!UserPrincipal.Current.GetGroups().Any(p => p.Name == role.Name)) { 
                        user.Roles.Remove(role); 
                    } 
                } 
                foreach(string groupName in UserPrincipal.Current.GetGroups().Select(x => x.Name)) { 
                    if(!user.Roles.Any(p => p.Name == groupName)) { 
                        PermissionPolicyRole role = objectSpace.FindObject<PermissionPolicyRole>(new BinaryOperator("Name", groupName)); 
                        if(role != null) { 
                            user.Roles.Add(role); 
                        } 
                    } 
                } 
            } 
            if(user == null || user.Roles.Count == 0) { 
                throw new AuthenticationException(userName); 
            } 
            objectSpace.CommitChanges(); 
            return user; 
        } 
    }
    
  • 重建解决方案。
  • 运行应用程序设计器,然后从工具箱中用CustomAuthenticationActiveDirectory组件替换AuthenticationActiveDirectory组件(如“如何:使用自定义登录参数和身份验证”主题的“将自定义类传递给安全系统”中所示)。

    CustomAuthenticationActiveDirectory

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