PFCG — PFCG Role Maintenance Transaction
PFCG is the transaction used to build, maintain, and generate authorization roles in SAP. It combines a menu of transactions or Fiori apps, a set of authorization objects with maintained values, and organizational level restrictions into a generated profile, which is then assigned to users. Role definition, profile generation, and user assignment are three separate saves.
This page covers PFCG, the SAP transaction for creating and maintaining single, composite, and derived roles. It focuses on the diagnostic patterns behind the most common tickets: roles that look correct but do not grant access, stale profiles, missing SU24 proposals, and expired user assignments.
Reviewed by an ERPClimb SAP consultant on 15 Sept 2026· 1,197 words
Diese Seite ist noch nicht auf Deutsch verfügbar.
Purpose
PFCG builds authorization roles. A role has a menu of transactions, Fiori apps, or reports, an Authorizations tab where objects and field values are maintained, and a User tab where the role is assigned to individual users with a validity period. The structural fact that explains most confusion: these are three independent steps with three independent saves. Changing the menu does not touch the authorization data. Changing the authorization data does not update the generated profile until it is explicitly generated. Generating the profile does not push it into a user's session until a user comparison is run. A role can look complete and correct on screen while the actual runtime authorization a user carries is several steps out of date.
When it is used
PFCG is reached for whenever access needs to be granted, changed, or removed at the role level, which is the normal path in any environment with a segregation-of-duties model. Security consultants use it during initial role build, during change requests that add a transaction or Fiori app to an existing role, during remediation of SoD conflicts, and during role redesign projects. It is not used for one-off user changes to lock, unlock, or reset a password, or to assign an existing role to a single user quickly, both of which sit more naturally in SU01. It is not used to analyze who already has what, which is SUIM's job. It reads its proposed authorization values from SU24, so any change to what a transaction should require by default is made there, not in PFCG.
How to use it in practice
- Enter or create the role name on the initial screen, choosing single, composite, or derived role type
- On the Menu tab, add the transactions, reports, or Fiori app catalog entries the role should grant
- On the Authorizations tab, let the system propose objects from SU24 defaults, then maintain field values and organizational levels
- Generate the profile from the Authorizations tab, checking that the traffic light turns green with no open fields
- On the User tab, assign users with a from/to validity period
- Run user comparison (individual or via mass comparison) so the generated profile is written to the user master
Key data objects
- AGR_TCODES - transactions and apps assigned to a role menu
- AGR_1251 - authorization object field values maintained on the role
- AGR_1252 - organizational level values maintained on the role
- AGR_USERS - user-to-role assignment records with validity dates
- AGR_TEXTS - role short and long descriptions
- AGR_AGRS - links between composite roles and their component single roles
How to prove it in the data
To confirm whether a user actually has a role, query AGR_USERS filtering on the user ID and role name and check the validity dates against the current date; an expired 'to' date means the assignment is dead even though it still shows in PFCG history. To confirm what values a role actually carries, query AGR_1251 filtering on the role name and the authorization object in question. If the user's actual authorization does not match what AGR_1251 shows, the profile was not regenerated or not compared, which points at the generation step rather than the data itself.
ECC vs S/4HANA
PFCG is unchanged as the role-build transaction on S/4HANA. What changes is the content of the role menu, which now carries Fiori business catalogs, spaces, and app tile references alongside or instead of classic transaction codes. Building a role that grants a Fiori app correctly requires assigning the right catalog and space in addition to the backend authorization object for the underlying OData service, which is an additional step that has no ECC equivalent. There is no Fiori app that replaces PFCG itself for on-premise or private cloud role administration.
Common pitfalls and how to diagnose them
- Profile not generated: the Authorizations tab shows a yellow or red traffic light because field values were changed after the last generation. The role displays the new values but the runtime profile still reflects the old ones. Fix by opening the Authorizations tab and regenerating before closing the ticket, not by re-saving the menu.
- User comparison skipped: the profile is generated and correct but was never pushed to the user's buffer, because the User tab comparison was never run. This is the single most common cause of 'the role has the right access but the user still gets denied' tickets. Run comparison, individual first, mass via a background job if many users are affected.
- SU24 default missing or wrong: a transaction added to the menu produces no proposed authorization object at all, because no default value exists in SU24 for that transaction. The fix belongs in SU24 maintenance, then a manual merge into the role, not in manually adding the object inside PFCG as a one-off patch that will not survive a reorganization.
- Organizational level left blank or wildcarded: a blank org level field is treated as fully open, not as empty, and a copied role frequently carries the source role's org values forward unnoticed. Check AGR_1252 whenever access appears broader than requested.
- Derived role not regenerated after master change: changing menu or authorization values on a master role does not automatically regenerate every derived role; each derived role must be revisited and its own profile generated.
- Composite role edited instead of the single role: authorization data lives on the single roles, not the composite. Editing the composite menu and generating does nothing to the authorization values a user actually receives.
- Silent expiry: a user assignment with a passed 'to' date in AGR_USERS produces no error message anywhere; access simply stops working overnight with no change having been logged against the role itself.
Whose problem this is
This is a security/GRC functional problem, not an ABAP development problem, though it sits close to Basis because profile generation and user buffer behavior are technical. A good handover includes the role name, the exact transaction or app requested, the business justification and org values approved, the affected user ID, and if troubleshooting a denial, an ST01 or SU53 trace showing the failing object.
Related SAP objects
Reviewed pages this object connects to in the ERPClimb knowledge graph.
Source: ERPClimb — https://erpclimb.com/sap-tcodes/pfcgERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.