博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[AX]AX2012 如何限制只访问公司内的员工记录
阅读量:5833 次
发布时间:2019-06-18

本文共 3131 字,大约阅读时间需要 10 分钟。

默认情况下Human resources/Common/Workers会列出组织架构内所有公司(法人)内的员工信息,如果我们要只允许用户查看其本公司内部的员工信息该怎么办呢?回答这个问题首先要搞清楚两个关系,一是员工和公司的关系,二是用户和公司的关系。

员工记录在表HcmWoker,这是一个不保存公司信息的表(SaveDataPerCompany=no),也没有专门的字段来保存公司的信息,所以员工和公司是没有直接联系的,员工和公司的关系是在表HcmEmployment中体现,它记录员工和公司的雇佣关系,一个员工可能为多个公司工作,HcmEmployment记录的就是员工在某个公司内工作的起止日期,可以在Human resources/Common/Workers/Employment history中查看到具体的信息,如果一个员工同时为多个公司工作,在打开员工具体信息后Employment页面上是可以选择具体查看哪个公司的信息:

所以我们说“公司内的员工”实际上指的是和当前和公司具有有效雇佣关系的员工。

再来看用户和公司的关系,用户可以有多个角色,这个角色可以是在组织内所有公司有效,也可以是指定到特定的公司,当前登录用户具有访问哪些公司的权限就是靠角色指定的公司来控制的:

注意系统管理员角色是不能指派为某个公司的,它在所有公司内都是有效的。

搞清楚了这两个关系,我们来看看如何来限制用户只能查看可访问公司的员工信息,其实很简单,找到AOT\Security\Policies\HcmWorkerLegalEntity安全策略激活就可以了:

安全策略Extensible data security policy是记录集访问权限的升级,它通过Query过滤出用户能访问的主数据表记录,再根据主表记录过滤出能访问的子表记录。HcmWorkerLegalEntity XDS策略用到的Query是HcmXdsWorkerLegalEntity,可以看到主表就是HcmWorker,与之关联的表是雇佣关系HcmEmployment,它又与MyLegalEntities表关联,MyLegalEntities是个比较特殊的表,表的类型为TempDb临时表,数据库中是不保存数据的,只是在需要用到是通过表上的xds方法填充:

public RefreshFrequency xds(){    CompanyInfo                             company;    MyLegalEntities                         myLegalEntities;    UserDataAreaFilter                      udaf;    SecurityRights rights = SecurityRights::construct();    rights.populateSelectableCompanies();    ttsBegin;    delete_from myLegalEntities;    insert_recordset myLegalEntities(Name,                                         LanguageId,                                         NameAlias,                                         PartyNumber,                                         LegalEntityID,                                         Tax1099RegNum,                                         UPSNum,                                         Key,                                         BranchId,                                         OrgId,                                         BranchNumber,                                         EnterpriseNumber,                                         IssuingSignature,                                         DataArea)    select            Name,            LanguageId,            NameAlias,            PartyNumber,            RecId,            Tax1099RegNum,            upsNum,            Key,            BranchId,            OrgId,            BranchNumber,            EnterpriseNumber,            IssuingSignature,            DataArea    from company    join udaf    where    company.DataArea == udaf.DataArea    &&    udaf.User == curUserId();    ttsCommit;    return RefreshFrequency::PerSession;}

它的具体作用时从将当前用户允许访问的公司信息填充到表MyLegalEntities,用户能访问的公司列表记录在表UserDataAreaFilter中,而UserDataAreaFilter内容又是SecurityRights.populateSelectableCompanies()根据我们前面看到的用户角色指派的公司得到的,这样就形成了“用户->公司->雇佣关系->员工”完整的访问限制链条。

系统中使用XDS安全策略地方还很多,比如比较典型的是Global address book的限制访问,Organization administration>Setup>Global address book>Global address book parameters>Security policy options>Secure by legal entity就是通过启用DirRestrictViewPartyInLegalEntity和DirRestrictViewPartyTableInLegalEntity两个XDS安全策略来是实现的。在系统功能中我没有找到通过参数设置来启用HcmWorkerLegalEntity策略的地方,只能是管理员在AOT中手工启用,或许只是我没有找到,有知道的网友请不吝赐教。

 

转载于:https://www.cnblogs.com/duanshuiliu/archive/2013/06/08/3125562.html

你可能感兴趣的文章
直播源码开发视频直播平台,不得不了解的流程
查看>>
Ubuntu上的pycrypto给出了编译器错误
查看>>
聊聊flink的RestClientConfiguration
查看>>
在CentOS上搭建git仓库服务器以及mac端进行克隆和提交到远程git仓库
查看>>
測試文章
查看>>
Flex很难?一文就足够了
查看>>
【BATJ面试必会】JAVA面试到底需要掌握什么?【上】
查看>>
CollabNet_Subversion小结
查看>>
mysql定时备份自动上传
查看>>
17岁时少年决定把海洋洗干净,现在21岁的他做到了
查看>>
linux 启动oracle
查看>>
《写给大忙人看的java se 8》笔记
查看>>
倒计时:计算时间差
查看>>
Linux/windows P2V VMWare ESXi
查看>>
Windows XP倒计时到底意味着什么?
查看>>
运维工程师在干什么学些什么?【致菜鸟】
查看>>
Linux中iptables详解
查看>>
java中回调函数以及关于包装类的Demo
查看>>
maven异常:missing artifact jdk.tools:jar:1.6
查看>>
终端安全求生指南(五)-——日志管理
查看>>