EPR类企业管理系统

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


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

关联对象的权限

XAF安全系统允许你管理权限访问一个非聚集聚集在半自动模式属性:您只能关联的一侧指定的权限,并设置XAF他们换另一侧。本主题说明安全系统如何处理关联和引用属性的权限。

非聚集对象

如果您明确授予对一个关联方的访问权限,则安全系统允许用户读取/写入非聚合的关联属性。

例如,ContactDepartment业务对象具有一对多关系,并且Department实现Contacts集合属性。当您授予对部门的联系人”集合的访问权限时,安全系统将允许访问“联系人”的“部门”属性。安全系统还允许访问关联对象的default属性。此属性用于以人类可读的格式显示集合。

注意

即使您不允许显式访问此类型,也会显示“联系人列表视图”。

聚合对象

如果您指定的权限,允许用户阅读汇总收集和不指定关联的另一面权限,安全系统允许读取聚集的类型。如果您指定允许用户写入聚合集合的权限,则安全系统将允许对聚合类型进行写入/创建/删除操作。

例如,ContactNote业务对象具有一对多关系,并且Contact实现Notes聚合集合属性。当您授予读取联系人便笺集合的权限时,安全系统将自动允许用户读取便笺类型。当您授予写此集合的权限时,安全系统将自动允许用户创建,写入和删除“便笺”类型的对象。

参考对象

安全系统要求为引用属性及其类型明确指定权限。有关更多信息,请参考“参考属性访问”主题。

例如,订购业务对象有客户的参考属性的客户类型。添加允许用户读取OrderCustomer属性和Customer类型的权限,以允许访问OrderCustomer属性。

关联对象权限的处理方式

AssociationPermissionsMode决定安全系统如何处理对相关对象的权限枚举列表模式。要更改模式,请将SecurityStrategy.AssociationPermissionsMode属性设置为以下值之一:

价值

描述

汽车

默认模式。此模式不处理“许多”关联方的权限中的条件,但比ExtendedAuto更快地工作。如果您在这些权限中具有条件,请在关联的两侧设置权限,或使用ExtendedAuto模式。

扩展自动

此模式可以处理所有情况,但比Auto慢。如果此模式会使您的应用程序变慢,请在关联的两侧设置权限并设置条件。

手动的

使用此模式可以配置关联双方的权限。有关此方法的更多信息,请参考如何:手动配置关联集合的权限和参考属性主题。

权限请求计算过程

使用SecuritySystem.IsGranted方法检查成员,类型或对象是否具有允许/拒绝用户进行操作的权限。

检查成员的权限

  1. 安全系统对指定的成员发出许可请求,并检查该成员是否是关联的一部分(请参阅IMemberInfo.IsAssociation)。如果满足此条件,则IsGranted方法返回以下值之一;否则,返回false。否则,安全系统将检查下一个条件(步骤2)。

    • 如果指定的成员具有显式拒绝操作的权限(您为该操作设置了“ Deny”),则IsGranted方法将返回false
    • 如果指定的成员不具有明确拒绝操作的权限,则安全系统将为关联成员发出权限请求。该IsGranted方法返回下列值之一:
      • false-如果关联成员具有明确拒绝该操作的权限;
      • true-如果指定或关联的成员具有显式允许该操作的许可权;
      • 一个由权限策略确定的值-如果关联成员没有任何明确指定的权限。

  2. 如果在第一步未找到关联,则安全系统将检查成员是否具有明确指定的权限。如果满足此条件,则IsGranted方法返回下面列出的值之一;否则,返回false。否则,安全系统将检查下一个条件(步骤3)。

    • false-如果指定的成员具有明确拒绝操作的权限(您为该操作设置了“ Deny”);
    • true-如果指定的成员具有显式允许操作的权限。

  3. 如果在第一步未找到关联,并且该成员没有明确指定的权限,则安全系统将检查指定的成员是否为默认属性(请参见XafDefaultPropertyAttribute)。如果满足此条件,则安全系统将对实现此成员的类中的所有关联发出许可请求;否则,将对许可权进行更改。否则,它检查下一个条件(步骤4)。该IsGranted方法返回下列值之一:

    • true-如果类中的至少一个关联具有显式允许该操作的许可权;
    • 一个由权限策略确定的值-如果此类中没有任何关联明确指定权限。

  4. 如果没有满足任何先前步骤中的条件,则安全系统将检查实现此成员的类是否在另一类中用作聚合集合的类型。该IsGranted方法返回下列值之一:

    • false-如果聚合集合具有明确拒绝该操作的权限;否则为false。
    • true-如果聚合集合具有显式允许该操作的许可权;
    • 一个由权限策略确定的值-如果聚合集合没有显式指定的权限或不满足条件。

检查类型或对象的权限

  1. 安全系统请求指定类型的权限。如果明确允许/拒绝“类型许可”(您将操作设置为“ Allow” /“ Deny”),则IsGranted方法将返回true / false
  2. 如果在上一步中未找到“类型许可”,则安全系统将检查指定的类型是否在另一个类中用作聚合集合的类型。如果满足此条件,则安全系统会对此集合进行许可请求。如果聚合集合具有显式允许/拒绝该操作的权限,则IsGranted方法将返回true / false
  3. 如果不满足上面列出的条件,则IsGranted方法将返回一个由权限策略确定的值。

PermissionsForAssociations_type

注意

安全系统不会处理对关联的“导航”操作的权限请求。

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