EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

使用安全系统

在本课程中,您将学习如何在应用程序中使用安全系统。使用此系统时,会将SecurityStrategyComplex安全策略应用于您的应用程序。根据此策略,用户具有角色,而角色又具有权限集。本主题将指导您创建代码中的管理员和普通用户。管理员将具有完全访问权限集,而用户将具有受限权限集。您将看到管理员如何创建用户角色,为其指定权限,然后在运行时将角色分配给用户。您还将使用AuthenticationStandard身份验证类型以登录到应用程序。

注意

在继续之前,请花一点时间查看以下主题。

Active Directory身份验证

如果遵循了使用向导创建解决方案的课程,则已经通过AuthenticationActiveDirectory身份验证启用了安全系统。

调用WinForms应用程序的应用程序设计器,然后查看“安全性”部分。

Tutorial_SS_Lesson1_0_2

如上图所示,使用了复杂安全策略和Active Directory身份验证,并且CreateUserAutomatically属性设置为true。这意味着,当您第一次运行应用程序时,会自动创建一个用户对象(PermissionPolicyUser)。该对象的UserName属性设置为您的Active Directory帐户。您拥有所有权限,因为自动创建的用户类型是管理员。要在运行时查看此用户的详细信息,请导航至导航控件中的“用户”和“ MyDetails”项。

Tutorial_SS_Lesson1_0_1

现在,按照教程学习如何在应用程序中更改身份验证类型。

标准认证

  • 调用WinForms应用程序的应用程序设计器。要使用标准身份验证策略,请从DX中拖动AuthenticationStandard组件19.2 “设计人员的安全性”部分的“ XAF安全性工具箱”选项卡。

    Tutorial_SS_Lesson2_0_1

  • 调用ASP.NET应用程序的应用程序设计器。从DX中拖动AuthenticationStandard组件19.2 “设计人员的安全性”部分的“ XAF安全性工具箱”选项卡。

在代码中创建预定义的用户和角色

  • 运行一个应用程序之前,标准认证启用,创建几个预定义的用户角色业务对象,并分配角色用户。这将允许您在运行时登录并创建更多用户

    在运行应用程序时数据库中应存在的对象是在MySolution.Module中的ModuleUpdater.UpdateDatabaseAfterUpdateSchema方法中创建的数据库更新| Updater.cs / Updater.vb文件(请参阅供应初始数据EF / XPO)主题)。

    首先,创建Roles。以下代码演示了如何创建“管理员”角色

    using DevExpress.ExpressApp.Security;
    // ...
    public override void UpdateDatabaseAfterUpdateSchema() {
        base.UpdateDatabaseAfterUpdateSchema();
        // ...
        PermissionPolicyRole adminRole = ObjectSpace.FindObject<PermissionPolicyRole>(
            new BinaryOperator("Name", SecurityStrategy.AdministratorRoleName));
        if (adminRole == null) {
            adminRole = ObjectSpace.CreateObject<PermissionPolicyRole>();
            adminRole.Name = SecurityStrategy.AdministratorRoleName;
            adminRole.IsAdministrative = true;
        }
        // ...
    }
    
    注意

    在上面的代码中,PermissionPolicyRole从类DevExpress.Persistent.BaseImpl.PermissionPolicy命名空间用于XPO和PermissionPolicyRole从类DevExpress.Persistent.BaseImpl.EF.PermissionPolicy命名空间被用于实体框架。确保添加了正确的using(在VB中导入)指令。

    在这里,“管理员”角色具有对所有类型的对象的完全访问权限,因为其IPermissionPolicyRole.IsAdministrative属性设置为true

    现在创建一个“用户”角色-一个非常基本的角色,该角色将只能访问当前用户对象。您稍后可以使用PermissionSettingHelper类的扩展方法在UI中扩展此Role的权限集。请参阅以下代码。

    public override void UpdateDatabaseAfterUpdateSchema() {
        // ...
        PermissionPolicyRole userRole = ObjectSpace.FindObject<PermissionPolicyRole>(new BinaryOperator("Name", "Users"));
        if(userRole == null) {
            userRole = ObjectSpace.CreateObject<PermissionPolicyRole>();
            userRole.Name = "Users";
            userRole.PermissionPolicy = SecurityPermissionPolicy.AllowAllByDefault;
            userRole.AddTypePermission<PermissionPolicyRole>(SecurityOperations.FullAccess, 
    SecurityPermissionState.Deny);
            userRole.AddTypePermission<PermissionPolicyUser>(SecurityOperations.FullAccess, 
    SecurityPermissionState.Deny);
            userRole.AddObjectPermission<PermissionPolicyUser>(SecurityOperations.ReadOnlyAccess, 
    "[Oid] = CurrentUserId()", SecurityPermissionState.Allow);
            userRole.AddMemberPermission<PermissionPolicyUser>(SecurityOperations.Write, 
    "ChangePasswordOnFirstLogon", null, SecurityPermissionState.Allow);
            userRole.AddMemberPermission<PermissionPolicyUser>(SecurityOperations.Write, 
    "StoredPassword", null, SecurityPermissionState.Allow);
            userRole.AddTypePermission<PermissionPolicyRole>(SecurityOperations.Read, SecurityPermissionState.Allow);
            userRole.AddTypePermission<PermissionPolicyTypePermissionObject>("Write;Delete;Navigate;Create", SecurityPermissionState.Deny);
            userRole.AddTypePermission<PermissionPolicyMemberPermissionsObject>("Write;Delete;Navigate;Create", 
    SecurityPermissionState.Deny);
            userRole.AddTypePermission<PermissionPolicyObjectPermissionsObject>("Write;Delete;Navigate;Create", 
    SecurityPermissionState.Deny);
        }
        //...
    }
    

    以下代码演示了如何创建用户。

    using DevExpress.ExpressApp.Security;
    // ...
    public class Updater : ModuleUpdater {
       public Updater(IObjectSpace objectSpace, Version currentDBVersion) 
          : base(objectSpace, currentDBVersion) { }   
       public override void UpdateDatabaseAfterUpdateSchema() {
          // ...
          // If a user named 'Sam' does not exist in the database, create this user.
          PermissionPolicyUser user1 = ObjectSpace.FindObject<PermissionPolicyUser>(
            new BinaryOperator("UserName", "Sam"));
          if(user1 == null) {
             user1 = ObjectSpace.CreateObject<PermissionPolicyUser>();
             user1.UserName = "Sam";
             // Set a password if the standard authentication type is used.
             user1.SetPassword("");
          }
          // If a user named 'John' does not exist in the database, create this user.
          PermissionPolicyUser user2 = ObjectSpace.FindObject<PermissionPolicyUser>(
               new BinaryOperator("UserName", "John"));
          if(user2 == null) {
             user2 = ObjectSpace.CreateObject<PermissionPolicyUser>();
             user2.UserName = "John";
             // Set a password if the standard authentication type is used.
             user2.SetPassword("");
          }
       }
    }
    

    最后,您将角色分配给Users

    public class Updater : ModuleUpdater {
        // ... 
        public override void UpdateDatabaseAfterUpdateSchema() {
          // ...
          user1.Roles.Add(adminRole);
          user2.Roles.Add(userRole);
        }
    }
    
    注意

    客户端安全性(2层体系结构)主题中提供了更多示例。

  • 运行WinForms或ASP.NET应用程序。以下登录窗口将显示在WinForms应用程序中。

    Tutorial_SS_Lesson1_1

    以下窗口将显示在ASP.NET应用程序中。

    Tutorial_SS_Lesson1_5

    单击 “登录”按钮后,将对用户的凭据进行身份验证,然后将运行该应用程序。

在UI中创建角色

管理员和其他具有角色创建权限的用户可以按以下方式创建角色。

在导航控件中选择“角色”项目,然后单击“新建操作”。在调用的详细信息视图中,设置新角色的名称和权限。

Tutorial_SS_Lesson2_2

使用“权限策略”属性,可以为每个角色分配“全部拒绝”,“全部只读”或“全部允许”默认权限策略。对于每个操作,您可以显式指定“允许”或“拒绝”修饰符,或将其保留为空白。如果未指定修饰符,则权限由角色的权限策略确定。

在用户界面中创建用户

拥有创建用户权限的用户可以执行以下操作。

在导航控件中选择“用户”项,然后单击“新建”按钮。在调用的详细信息视图中,指定用户名并分配一个或多个角色。

Tutorial_SS_Lesson2_3

注意

如果需要临时禁止用户使用该应用程序,请将“处于活动状态”属性设置为false

要将密码分配给新创建的用户,请单击“重置密码”按钮。分配的密码应传递给用户。首次登录时,用户将可以更改它。

Tutorial_SS_Lesson2_4

注意

此按钮是ResetPassword操作,允许修改用户对象的用户使用。使用Active Directory身份验证时,此按钮不可用。

我的细节

我的详细信息”导航项对具有对当前User对象的读取访问权限的用户可用。该导航项将打开当前用户详细信息。

SS_Complex_Win

在ASP.NET应用程序中,也可以通过单击页面右上角的“我的详细信息”链接来打开它。

MyDetailWeb

更改密码

使用标准身份验证类型时,一旦显示“我的详细信息” “详细信息视图” ,“更改我的密码”按钮将可用。此按钮将打开一个对话框,用户可以在其中更改密码。

Tutorial_SS_Lesson2_5

注意

此按钮是ChangePasswordByUser操作,如果使用Active Directory身份验证,则此按钮不可用。要在这种情况下更改密码,最终用户可以使用操作系统的标准工具(例如,按CTRL ALT DEL并选择“更改密码”)。

下一课: 使用代码访问安全系统

相关文章

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