AX 2012的权限,根据其设计思路,是可以对任何表字段,窗体控件,以及运行在服务器端的类中的方法(方法头上标记有SysEntryPointAttribute(false)的方法) 进行权限控制。
可以看到,权限被划分为了:Code Permission, Privileges, Duties, Roles, Process Cycles, Policies.
他们的关系大致如下:
红色框里是用MenuItem来控制窗体的可见性、可编辑性等属性。
绿色框里是针对某个具体字段,table,方法中的个别字段进行控制。
首先应该根据红色框的思路配置,对个别角色需要对表字段或者窗体控件要单独控制的,再Permissions中增加特许权限。
Policies是做数据行过滤用。Process Cycles是duty的集合,而duty下面包含Privileges,这个是方便新建角色的时候可以根据流程周期及职责快速为新角色分配权限。
熟悉数据库的开发人员,通过数据库表/ 视图可以更好理解他们的关系:
SecurityUserRole: 保存了“系统用户”与“角色”之间的关系
SecurityRole: 角色表
SecurityRoleTaskGrant: 保存了“角色”与权限的关系。
SecurityTask: 权限表,所谓的Task包含了Privileges, Duties, Process Cycles 三种情况, 分别对应了枚举值SecurityTaskType的0,1,2
SecuritySubTask: 保存了Task之间的树形结构。Process Cycles包含Duties包含Privileges。
另外UserInfo保存了用户信息;SysModelElementLabel保存了界面上的字段多语言描述
用以上表做连接查询就可以抽出所有用户所对应的全部权限了。很容易吧?