EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

预定义的用户,角色和权限

本主题描述如何定义内置的用户帐户及其权限,应在初始化应用程序数据库时自动创建它们。

创建一个管理帐户

标准身份验证需要管理员角色和与此角色相关联的管理员用户。这些对象是使用Active Directory身份验证自动创建的。要手动添加这些对象,请执行以下操作:

  • 在模块项目中,引用DevExpress.ExpressApp.Security.v 19.2 .dll程序集。
  • 编辑位于模块项目的DatabaseUpdate文件夹中的Updater.csUpdater.vb)文件。重写ModuleUpdater.UpdateDatabaseAfterUpdateSchema方法,如下所示:

    using DevExpress.Persistent.BaseImpl.PermissionPolicy;
    // ...
    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;
        }
        PermissionPolicyUser adminUser = ObjectSpace.FindObject<PermissionPolicyUser>(
            new BinaryOperator("UserName", "Administrator"));
        if (adminUser == null) {
            adminUser = ObjectSpace.CreateObject<PermissionPolicyUser>();
            adminUser.UserName = "Administrator";
            adminUser.SetPassword("");
            adminUser.Roles.Add(adminRole);
        }
        ObjectSpace.CommitChanges();
    }
    

PermissionPolicyUserPermissionPolicyRole持久对象表示用户和角色。

现在,运行该应用程序将在启动时显示一个登录对话框。您可以使用空密码以“管理员”身份登录(可以将备用密码传递给SecurityUserBase.SetPassword方法),在运行时添加更多的用户和角色,或者在Updater类代码中指定更多的预定义用户和角色。

设置非管理角色的权限

如果角色不是管理员角色(IsAdministrative属性为false),则需要显式授予该角色所需的权限。您可以指定创建,读取,写入和删除数据操作的权限,并管理对导航项的访问。

权限政策

首先,您应该设置“角色的权限策略”。如果没有为特定类型,对象或成员明确指定权限,则IPermissionPolicyRole.PermissionPolicy属性指定安全系统的行为。可用行为在SecurityPermissionPolicy枚举中列出(DenyAllByDefaultAllowAllByDefaultReadOnlyAllByDefault)。

defaultRole.PermissionPolicy = SecurityPermissionPolicy.AllowAllByDefault;

访问导航项

角色的导航权限管理导航项目访问。您可以使用PermissionSettingHelper.AddNavigationPermission方法为单个导航项或整个导航组授予或拒绝权限。

defaultRole.AddNavigationPermission(@"Application/NavigationItems/Items/Default/Items/MyDetails", SecurityPermissionState.Allow);

CRUD访问特定类型的所有对象

要为具有特定业务类的创建,读取,更新和删除(CRUD)操作指定权限,请使用PermissionSettingHelper.AddTypePermission <T>方法:

defaultRole.AddTypePermission<Contact>(SecurityOperations.Read, SecurityPermissionState.Deny);

方法参数集是所有用于管理CRUD访问的PermissionSettingHelper方法的标准设置:

  • 操作参数是包含安全操作的分号分隔的列表的字符串。该SecurityOperations类提供了操作的名字和他们的组合字符串常量。
  • 状态参数取SecurityPermissionState枚举值(允许拒绝)如果访问被授予或拒绝指定。
  • 牛逼通用参数指定权限分配的业务对象类型。

若要覆盖现有的“类型权限”,请使用PermissionSettingHelper.SetTypePermission <T>方法。它在当前角色中搜索指定类型的第一许可,并根据指定参数对其进行更新。如果未找到相应的类型权限,则会创建该权限。

defaultRole.SetTypePermission<Contact>(SecurityOperations.Read, SecurityPermissionState.Deny);

对符合条件的对象的CRUD访问

对象权限管理对符合指定条件的业务对象实例的访问。所述PermissionSettingHelper.AddObjectPermission <T>方法找到在当前角色的给定类型的第一类型的许可,并将该对象的许可给它。如果未找到适当的类型许可,则该方法将创建它。附加条件参数指定目标对象应匹配的条件表达式

defaultRole.AddObjectPermission<PermissionPolicyUser>(SecurityOperations.Read, "[Oid] = CurrentUserId()", SecurityPermissionState.Allow);

CRUD访问业务类属性

您可以使用“成员权限”来管理对业务类的单个成员的访问。所述PermissionSettingHelper.AddMemberPermission <T>方法找到在当前角色的给定类型的第一类型的许可,并增加了构件许可给它。如果未找到适当的类型许可,则该方法将创建它。的成员参数是包含目标构件名称的分号分隔的列表的字符串,和所述标准的参数是包含条件表达式指定的目标对象的字符串。如果条件为(VB中为Nothing),则成员权限将应用于给定类型的对象。

defaultRole.AddMemberPermission<Person>(SecurityOperations.Read, "Name", null, SecurityPermissionState.Allow);

您还可以指定条件以将成员权限应用于符合以下条件的对象:

defaultRole.AddMemberPermission<Person>(SecurityOperations.Read, "Name", "[Name] = 'John'", SecurityPermissionState.Allow);

有关如何创建预定义的用户和角色的更多示例,请参阅SecurityDemo源。默认情况下,此演示应用程序位于%PUBLIC%\ Documents \ DevExpress演示19.2 \ Components \ eXpressApp Framework \ SecurityDemo文件夹中。

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