User and People

People

Navigation:HRMS Management Responsibility -> HRMS Manager -> People -> Enter and Maintain


Type People:1)Employee 2)Applicant(申请人,请求者) 3)Contingent Worker(临时工)

Tables:PER_ALL_PEOPLE_F
PER_ALL_PEOPLE_F is the DateTracked table that holds personal information for employees, applicants, ex-employees, ex-applicants, contacts and other people.
The columns START_DATE,EFFECTIVE_START_DATE and EFFECTIVE_END_DATE are all maintained by DateTrack. The START_DATE is the date when the first record for this person was created. The earliest EFFECTIVE_START_DATE for a person is equal to the START_DATE.

Related Views:
HR_EMPLOYEES(-->PER_PEOPLE_F --> PER_ALL_PEOPLE_F)
PER_PEOPLE_X(-->PER_PEOPLE_F)
PER_PEOPLE_F

User

Navigation:System Administrator Responsibility > Security > User

Tables:FND_USER
FND_USER stores information about application users. Each row includes the user's username (what a user types in at the sign-on screen), password, and information on when the user should change the password.
Each row also contains information on when the user last signed on, start and end dates for when a username is valid and a description of the user.
Oracle Application Object Library does not use the USER_PASSWORD and LOCAL_PRINTER columns.
You need one row for each application user at your site. Oracle Application Object Library uses this information to allow users to sign on to an application.


User Table <--Relationship--> People Table

fnd_user.employee_id <--> PER_ALL_PEOPLE_F.PERSON_ID
<think>我们正在讨论的是在PeopleSoft的People Search初始化阶段添加数据权限控制(Data Permission Filter)。数据权限控制通常涉及行级安全(Row-Level Security, RLS)或基于用户角色的数据过滤。 在PeopleSoft中,实现数据权限控制通常有以下几种方式: 1. 使用视图(View)中的行安全视图(Row Security View)或直接使用行安全字段(如ROWSECCLASS)进行过滤。 2. 在搜索记录(Search Record)的SQL中添加条件,使用系统变量(如%OperatorId)来过滤数据。 3. 在组件搜索初始化(SearchInit)事件中编写PeopleCode来动态设置过滤条件。 根据用户需求,我们希望在人员搜索初始化时添加数据权限控制。这通常意味着我们需要在用户执行搜索之前,根据当前用户的权限动态地过滤数据。 具体步骤: 1. **确定权限控制逻辑** 首先需要明确权限控制的规则。例如,只允许用户查看自己部门的人员,或者根据安全角色(Security Role)来限制可见的数据。 2. **修改搜索记录(Search Record)** 如果权限控制逻辑相对固定(例如,始终只查看状态为“Active”的员工),可以直接在搜索记录对应的视图SQL中添加条件。但如果需要动态过滤(比如根据当前用户的信息),则需要使用系统变量或子查询。 例如,在视图SQL中添加: ```sql SELECT ... FROM PS_PERSONAL_DATA A WHERE EXISTS (SELECT 'X' FROM PS_ROW_SECURITY R WHERE R.ROWSECCLASS = A.ROWSECCLASS AND R.OPRID = %OperatorId) ``` 这里假设我们使用PeopleSoft的行级安全机制,即通过`PS_ROW_SECURITY`表控制,并且人员数据表(如`PS_PERSONAL_DATA`)中包含`ROWSECCLASS`字段。 3. **在搜索初始化(SearchInit)事件中添加PeopleCode(可选)** 如果过滤条件需要动态设置(例如,根据用户的不同角色设置不同的部门条件),则可以在组件的SearchInit事件中编写PeopleCode。 例如,在人员搜索组件的SearchInit事件中(在组件层或记录字段层): ```peoplecode Local Record &recSearch = GetRecord(Record.PERSONAL_DATA_SRCH); /* 假设搜索记录为PERSONAL_DATA_SRCH */ /* 根据当前用户获取其部门权限 */ Local string &deptId = GetUserDeptPermission(%OperatorId); /* 假设GetUserDeptPermission是一个自定义函数,返回当前用户有权限的部门 */ &recSearch.DEPTID.Value = &deptId; /* 设置部门ID条件 */ ``` 注意:这种方法需要确保搜索记录中有对应的字段(如DEPTID),并且这些字段在搜索定义的SQL中作为条件使用。 4. **使用元数据条件(Metadata Condition)** 在搜索定义(Search Definition)中,可以设置条件(Conditions)选项卡,添加基于元数据的过滤条件。这些条件可以绑定变量,然后在运行时由系统提供值。 例如,在搜索定义的条件中设置: ``` DEPTID = :1 ``` 然后,在搜索初始化时,通过PeopleCode设置这个参数的值。 5. **考虑使用行级安全视图(Row Security View)** PeopleSoft的标准做法是使用行级安全视图。在创建搜索记录时,通常建议使用已经包含了行级安全控制的标准视图(如`PS_PERSONAL_DATA`表对应的安全视图`PS_VW_PERSONAL_DATA`)。 6. **重建搜索索引** 修改搜索记录后,需要重建搜索索引。 7. **测试验证** 关键注意事项: - 性能:确保添加的条件不会导致全表扫描,特别是当数据量很大时。使用索引字段。 - 权限一致性:确保通过搜索查看到的数据用户在其他组件中看到的数据权限一致(即使用相同的行级安全机制)。 由于用户的问题是关于在初始化时添加数据权限控制,我们重点在SearchInit事件中设置条件,但也要确保底层的搜索记录支持行级安全。 下面是一个具体的示例,展示如何在SearchInit事件中设置行级安全条件: 假设我们有一个自定义的搜索记录`MY_PERSON_SRCH`,它基于视图`VW_MY_PERSON`,而该视图已经包含了行级安全字段`ROWSECCLASS`。我们想要在初始化时根据当前用户的行安全权限过滤数据。 然而,通常行级安全是通过视图自动应用的(因为标准视图已经包含了`PS_ROW_SECURITY`表的连接)。因此,在SearchInit事件中,我们可能不需要额外设置条件,因为行级安全已经内置于视图中。 但是,如果我们需要额外的条件(比如只查询特定业务单位的员工),则可以在SearchInit事件中设置: ```peoplecode Component Record &recSearch = GetRecord(Record.MY_PERSON_SRCH); &recSearch.BUSINESS_UNIT.Value = "MY_BU"; // 设置业务单位 ``` 或者,如果条件需要动态计算: ```peoplecode Local string &bu = GetUserBU(%OperatorId); // 自定义函数获取用户允许的业务单位 &recSearch.BUSINESS_UNIT.Value = &bu; ``` 总结步骤: 1. **确定数据权限规则**:明确根据什么规则过滤数据(如部门、业务单位、行安全类等)。 2. **检查搜索记录**:确保搜索记录(视图)已经包含必要的行级安全控制(如连接`PS_ROW_SECURITY`表)。如果没有,需要修改视图。 3. **在SearchInit事件中添加代码**(如果需要额外的动态条件):在组件或记录字段的SearchInit事件中,设置搜索记录字段的值,这些值将作为过滤条件。 4. **重建索引并测试**。 注意:如果使用标准的人员搜索(如`PERSONAL_DATA`搜索定义),则行级安全已经内置,通常不需要额外设置。但如果是自定义搜索,则需要确保行级安全被正确应用。 因此,针对用户的问题,主要回答如下:</think>### 在PeopleSearch初始化中添加数据权限控制的实现方案 在PeopleSearch初始化阶段添加数据权限控制,需结合行级安全(Row-Level Security)和SearchInit事件编程实现。以下是具体步骤: #### 1. **配置行级安全基础** - 在人员数据记录(如 `PS_PERSONAL_DATA`)中添加安全类字段: ```sql ALTER TABLE PS_PERSONAL_DATA ADD ROWSECCLASS VARCHAR2(10) DEFAULT 'DEFAULT'; ``` - 在 `PS_ROW_SECURITY` 表中配置权限规则: | OPRID | ROWSECCLASS | ACCESS_CD | |-------|-------------|-----------| | USER1 | FIN_DEPT | 2 (查看) | | USER2 | HR_DEPT | 2 | #### 2. **修改搜索记录视图** 在搜索定义关联的视图SQL中添加安全过滤(示例为Oracle语法): ```sql CREATE OR REPLACE VIEW VW_PERSON_SECURE AS SELECT A.EMPLID, A.NAME, A.DEPTID FROM PS_PERSONAL_DATA A WHERE EXISTS ( SELECT 'X' FROM PS_ROW_SECURITY R WHERE R.ROWSECCLASS = A.ROWSECCLASS AND R.OPRID = %OperatorId -- 系统自动绑定当前用户 AND R.ACCESS_CD >= 2 -- 权限值校验 ) ``` #### 3. **在SearchInit事件中添加动态过滤** 在组件记录字段的 **SearchInit事件** 中添加PeopleCode: ```peoplecode Local Record &rec = GetRecord(Record.PERSONAL_DATA_SRCH); Local string &userClass = GetUserSecurityClass(%OperatorId); /* 动态设置安全类过滤条件 */ &rec.ROWSECCLASS.Value = &userClass; /* 添加部门权限控制示例 */ If CheckUserAccess("FIN_DEPT") = True Then &rec.DEPTID.Value = "FIN"; End-If; ``` #### 4. **权限验证函数** 在应用包中创建权限检查函数: ```peoplecode Function CheckUserAccess(&secClass) Returns boolean; Local SQL &sql = CreateSQL("SELECT ACCESS_CD FROM PS_ROW_SECURITY WHERE OPRID=:1 AND ROWSECCLASS=:2"); &sql.Bind(%OperatorId, &secClass); Return (&sql.Fetch(&accessCd) AND &accessCd >= 2); End-Function; ``` #### 5. **重建搜索索引** ```peoplecode Local ApiObject &indexAPI = %Session.GetCompIntfc(COMPINTFC.SEARCH_ADMIN); &indexAPI.BuildIndex("PERSONAL_DATA", %Date); ``` #### 关键安全控制点 1. **三层权限验证** $$ \text{数据访问} = \begin{cases} \text{RLS基础权限} \\ \text{SearchInit动态过滤} \\ \text{组件级二次校验} \end{cases} $$ 2. **性能优化** - 为 `ROWSECCLASS` 和 `DEPTID` 字段创建索引 - 使用 `EXISTS` 替代 `IN` 子查询 - 限制返回字段数量 3. **树形权限继承** ```peoplecode &tree = GetTree("ORG_TREE", &userNode); &rec.WHERE = "DEPTID IN (" | TreeSelector(&tree) | ")"; ``` > ⚠️ 生产环境部署前需验证: > - 权限升级测试(普通用户→管理员) > - 跨部门数据可见性测试 > - 性能压力测试(建议使用 `PeopleTools Test Framework`)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值