Best practices for managing Email Marketing user roles and permissions across business units in multi-tenant Adobe Experience Cloud environments

I’m looking to hear from others managing Email Marketing user roles in multi-business-unit Adobe Experience Cloud environments. We’re currently running AEC 2022 with five business units, each needing different levels of access to email campaigns, templates, and subscriber data.

Our current approach uses a flat role structure where users are assigned permissions at the global level, then we manually restrict access through business unit attributes. This works but creates maintenance overhead and occasional data access issues when users switch units or need cross-unit collaboration.

I’m particularly interested in how others handle role hierarchy design, business unit attribute mapping in user profiles, and implementing effective data access layer filtering. What patterns have worked well for attribute-based access control in Email Marketing? How do you balance security with operational flexibility when users need temporary access to multiple units?

Three dominant patterns emerge for multi-BU role architecture in Adobe Experience Cloud Email Marketing (specifically Adobe Campaign or Marketo Engage depending on your stack — the patterns apply to both, but implementation paths differ; verify specifics in your version).


Pattern A: Hierarchical Org Unit Tree (Native BU Hierarchy)

Leverage the native organizational unit (OU) tree with role inheritance. Users are assigned to a node; permissions cascade downward. Cross-unit access is granted by elevating a user’s OU assignment temporarily or by assigning a secondary OU.

Trade-off: Clean inheritance, but OU reassignment for temporary access leaves audit gaps and is often irreversible without manual cleanup.


Pattern B: Attribute-Based Access Control (ABAC) via Named Rights + Filters

Rather than flat global roles, compose granular Named Rights into functional roles, then bind data access filters (entity-level security filters on NmsRecipient, NmsDelivery, etc.) to each BU attribute value. Users carry a BU attribute; the filter evaluates at query time.

-- Example security filter predicate on Delivery entity
<condition boolOperator="AND"
  expr="@businessUnit = $(user/businessUnit)"/>

Trade-off: Precise and auditable. Overhead moves to filter maintenance and schema governance. Performance impact on large recipient tables if filters aren’t indexed correctly — verify index coverage in your version.


Pattern C: Persona-Role Matrix with Temporary Delegation Tokens

Define a fixed persona set (Campaign Operator, Template Manager, Data Analyst, BU Admin) mapped to role bundles. Temporary cross-unit access is handled through time-boxed operator group membership managed by an identity provisioning workflow, not manual OU changes.

Persona Matrix (simplified):
Persona            | Create Delivery | Edit Template | View All BU Data | Approve Send
Campaign Operator  | BU-scoped       | No            | No               | No
BU Admin           | BU-scoped       | Yes           | BU-scoped        | Yes
Cross-BU Analyst   | No              | No            | Read-only, all   | No

Trade-off: Governance overhead shifts to the provisioning workflow. Requires IDP integration (Adobe IMS / external IdP via SAML/SCIM) for lifecycle automation to be viable.


Trade-offs Summary

Dimension Pattern A (OU Tree) Pattern B (ABAC Filters) Pattern C (Persona + Delegation)
Setup complexity Low Medium High
Ongoing maintenance Medium Medium Low (if automated)
Temporary access handling Weak Weak without workflow Strong
Audit traceability Moderate High High
Performance risk Low Medium (filter cost) Low
IDP dependency None None High
Cross-BU collaboration Manual workaround Requires filter redesign Designed-in

Decision Criteria

Choose based on:

  • User churn rate across BUs: High churn favors Pattern C’s lifecycle automation
  • Data sensitivity delta between BUs: High sensitivity requires Pattern B’s row-level filter precision
  • Existing IDP maturity: No SCIM provisioning pipeline makes Pattern C operationally risky
  • Team size managing permissions: Small teams absorb Pattern A; dedicated IAM function enables Pattern B or C
  • Audit/compliance requirements: Regulated industries (HIPAA, GDPR) weight toward Pattern B or C for demonstrable access lineage
  • Frequency of cross-unit campaigns: High frequency justifies Pattern C’s upfront investment

This draft is based on general Adobe Experience Cloud knowledge. It has not been verified against your specific version and environment. Practitioners: verify the steps and share your experience below.

We moved from flat roles to a hierarchical model last year and it’s been much better. We created parent roles like ‘Email_Marketing_Manager’ that inherit from base roles, then child roles for specific business units. This way, global permissions are defined once and unit-specific restrictions are layered on top. The key is designing the hierarchy to match your organizational structure rather than trying to force your org to fit the role model.

For business unit attribute mapping, we use a custom attribute called ‘primaryBusinessUnit’ and a multi-valued attribute ‘accessibleUnits’ in user profiles. This gives us flexibility for users who need cross-unit access without granting global permissions. The data access layer filtering checks both attributes - users get full access to their primary unit and read-only to accessible units by default.

We also implemented quarterly access reviews where business unit managers approve or revoke the accessibleUnits assignments. This keeps permissions current without requiring constant IT intervention. The attribute-based approach scales much better than managing individual role assignments per unit.

The hierarchical role model sounds promising. How did you handle the transition from flat to hierarchical? Did you migrate existing users gradually or do a big-bang cutover? I’m concerned about disrupting active campaigns during the migration.

We did a phased migration over six weeks. First, we created the new role hierarchy in parallel with existing roles. Then we assigned users to both old and new roles simultaneously for two weeks to test. Once we verified everything worked, we removed the old role assignments unit by unit. The parallel assignment period was crucial - it let us catch issues without impacting production campaigns. Make sure to test email send permissions thoroughly during the overlap period.

From a compliance perspective, don’t overlook the audit trail during role restructuring. We had to maintain detailed logs of who had access to what data during the transition for regulatory requirements. Also, consider implementing segregation of duties checks in your new role hierarchy - for example, users who can create email campaigns shouldn’t also have approval authority for the same campaigns. This is especially important in regulated industries like financial services or healthcare.

After implementing similar solutions for three different organizations, here’s what I recommend as a comprehensive approach:

Role Hierarchy Design: Create a three-tier hierarchy: Foundation roles (basic permissions), Functional roles (job-specific capabilities), and Unit-specific roles (data access boundaries). Foundation roles define what users can DO (create campaigns, manage templates, view analytics). Functional roles combine foundation permissions for job types (Campaign Manager, Content Creator, Analyst). Unit-specific roles control what data users can SEE within their functional capabilities.

This separation makes role management much cleaner. When someone’s job changes, you update their functional role. When they move business units, you update their unit-specific role. The foundation layer rarely needs changes once established.

Business Unit Attribute Mapping: Implement both ‘homeBusinessUnit’ and ‘dataAccessScope’ attributes in user profiles. The home unit determines default dashboard views and where new campaigns are created. The data access scope is a JSON structure that defines read/write/admin permissions per unit:

<dataAccessScope>
  <unit id="UNIT_NORTH" access="admin"/>
  <unit id="UNIT_SOUTH" access="read"/>
</dataAccessScope>

This structure supports complex scenarios like regional managers who need admin rights in their region and read access to others for reporting.

Data Access Layer Filtering: Implement row-level security in your data access layer that evaluates the dataAccessScope attribute. Every query for campaigns, subscribers, or templates should include a WHERE clause filtering by business unit, with the allowed units coming from the user’s scope. Cache these scope evaluations to avoid performance hits - recalculate only when user attributes change.

For cross-unit collaboration, create temporary ‘collaboration spaces’ where users from multiple units can work together. These spaces have their own access rules separate from standard unit boundaries. Users must explicitly request collaboration space access, which requires approval from all involved unit managers.

Attribute-Based Access Control (ABAC): Move beyond role-based access to attribute-based policies for fine-grained control. Define policies that evaluate multiple attributes: user role, business unit, campaign status, data sensitivity level, and time constraints. For example, a policy might state: ‘Campaign Managers can edit campaigns in their home unit if campaign status is Draft and data sensitivity is Standard.’

Use Adobe Experience Cloud’s policy engine to centralize these rules rather than hardcoding them in application logic. This makes policies auditable and easier to update as business requirements change.

Access Review and Audit Processes: Implement automated quarterly access reviews where business unit managers receive reports of all users with access to their unit’s data. Managers must approve continued access or flag users for removal. Automate the revocation of access that hasn’t been used in 90 days, with a grace period for seasonal workers.

Maintain comprehensive audit logs of all permission changes, access grant/revoke events, and cross-unit data access. These logs should capture not just who did what, but also the business justification and approval chain. In AEC 2022, you can configure custom audit events to track specific permission scenarios relevant to your compliance requirements.

For the transition, I recommend a pilot program with one business unit first. This lets you refine the hierarchy and policies before rolling out globally. Document common access patterns and create role templates for typical job functions - this dramatically speeds up onboarding new users across units.