[AX]AX2012 安全模型概览

相比Axapta 3.0使用configuration key、security key和User group来控制权限,AX2012的权限控制要复杂和灵活得多。AX2012是基于角色来控制用户权限的,类似于Axapta 3.0的用户组,每个用户必须被赋予一个或多个角色,下图是AX2012 security model的层次:

这些控制权限的基本元素位于AOT/Security节点下,可直接在AOT中创建和修改:

Roles 即用户角色,位于权限模型的最高层,由它控制每个用户的权限。Role可包含Duties和privileges,也可以直接添加Permission。Role还可以包含子Role,父级角色自动包含子角色的所有权限。在AOT的一对象比如Table上使用Add-Ins->Security tools->View related security roles可以找到哪些角色可以从什么地方访问这个对象。

Duty包含一个或多个Privileges,类似于工作岗位的概念,用它来集合某个工作岗位需要的权限。

Privileges 是权限模型的最基本控制元素,由它授予可访问的AOT元素的权限。AX的每个功能比如form、service都是通过entry point访问的,这些entry point包括比如menu items、web content items及service operations,在Priviledge的Entry points节点下可添加从进入点打开相应功能时的权限。在Priviledge的Permissions节点下包括Tables、Forms和Server methods三个子节点,Tables下可以添加表并设置对该表的访问权限;Forms下可添加对Form里某个Control的访问权限;Server methods下则是设置对某个Service operation的可访问权限,比如某个服务类以SysEntryPointAttribute(true)特性标识的方法。可访问权限从NoAcess到Delete依次升高,server methods则只有NoAcess和Invoke两个选择。

Process cycle 只是用来将和某种业务相关的Duty组织在一起方便对Duty的查找,对权限控制没有实际作用。

以上这些权限控制元素除了可以在AOT中直接添加外,还可以通过System administration->Setup->Security->Security roles和Security privileges添加修改,相应的修改会反映在AOT对应元素中,需要注意的是如果开启了版本控制,那么这些权限控制元素则只能在AOT中修改了,只有这样才能也对这些元素做版本控制。

除了上面列出的几个权限控制元素外,在AOT的security节点下还可以创建Code permission和Security policy。

Code permission 和用于控制某个server method的运行,比如在一个类的某个方法被定义为server static从服务器运行,同时添加[SysEntryPointAttribute(true)]特性指示要对方法使用的表做权限检查,从一个menu item运行这个方法时可以使用code permission来控制。新建一个code permission,在其server methods节点下加入前面类中定义的方法并设置其权限;再添加一个menu item来运行这个class的方法,menu item的linkedpermission type设置为code permission,linkedpermissionobject则设置为这个code permission对象;然后这个menu item就可以通过privilege下的entry point控制最后赋予某个角色。更详细的步骤可见http://msdn.microsoft.com/en-us/library/gg880012.aspx

Security policy 用于阻止对特定表行的访问,类似于select的where语句,在AOS所有的数据访问都受security policy的控制。Security policy属于Extensible data security model(XDS)的一部分:

Security policy通过Query挑选一些主表的纪录,根据security policy的contextstring、RoleName、RoleProperty的设置对符合条件的角色只显示Query挑选出来的纪录,如果在主表下还设置了关联的其他表,这些表也只显示与主表关联的纪录,这点和record-level security是不一样的,纪录级安全只能针对单个表设置,而且纪录级安全也只是在client端过滤纪录,微软推荐使用security policy,将来的版本record-level security可能就被废弃了。关于Security policy微软提供了一个演练http://msdn.microsoft.com/EN-US/library/hh272121和一份白皮书http://www.microsoft.com/en-us/download/details.aspx?id=26921

更多有关权限模型的内容请见http://technet.microsoft.com/en-us/library/gg731787.aspx

原文地址:https://www.cnblogs.com/duanshuiliu/p/2659924.html