# ERC-7820: Access Control Registry

Source: https://www.eipsfordesigners.com/standards/ERC-7820
Agent brief: https://www.eipsfordesigners.com/standards/ERC-7820/agent.md
Machine-readable JSON: https://www.eipsfordesigners.com/api/standards/ERC-7820
Last reviewed: 2026-04-05
Last updated: 2026-04-05

| Field | Value |
| --- | --- |
| Status | Draft |
| Chain | both |
| Category | Security & Trust |
| Journey stages | Approving & Permissioning |
| Detailed guide | Yes |
| Official specification | https://eips.ethereum.org/EIPS/eip-7820 |
| Discussion search | https://ethereum-magicians.org/search?q=ERC-7820 |

## UX Impact

Centralized registry manages roles across multiple contracts — admins grant/revoke permissions from single dashboard. Design implications: build unified permission management UI, show role assignments across contracts, display audit trail of permission changes. Design decisions: how granular to make role visibility — show all roles or just relevant ones, balance admin power with principle of least privilege.

## Summary

ERC-7820 adds role-based access control to NFTs. Instead of just "owner" and "approved", tokens can have multiple roles like admin, operator, minter, and burner. Each role has specific permissions, and users can delegate specific abilities without giving full control. Think file permissions but for NFTs.

## For Designers

- You can design UI that delivers grant specific roles: "can transfer" but not "can burn".
- You can design UI that delivers treasury manager can transfer, but only admin can burn.
- You can design UI that delivers platform gets "lend" permission only, can't sell.

## Applicability

### When to Use

- Your product addresses: nFT permissions are all-or-nothing.
- Your product addresses: dAOs can't manage NFTs with nuanced permissions.
- The flow should deliver: grant specific roles: "can transfer" but not "can burn".
- You are designing a role management dashboard experience with visible states and recovery paths.

### When to Avoid

- Show friendly names: "🎨 Can Create New NFTs".
- List specific permissions for each role.
- Show all role holders prominently.
- Wrong-address or approval mistakes are not recoverable in your product context.

## Problems It Solves

### NFT permissions are all-or-nothing

Impact: critical

Old way: Approve = full control over the NFT, can't limit

New way: Grant specific roles: "can transfer" but not "can burn"

### DAOs can't manage NFTs with nuanced permissions

Impact: high

Old way: One multisig owns everything, bottleneck

New way: Treasury manager can transfer, but only admin can burn

### Rental/lending permissions too broad

Impact: high

Old way: Give rental platform full approval

New way: Platform gets "lend" permission only, can't sell

### No audit trail of who can do what

Impact: medium

Old way: Check approvals manually, no clear role structure

New way: Query roles directly: "who has minter role?"

## Anti-Patterns

### Using technical role names

Severity: critical

"MINTER_ROLE" means nothing to most users

Instead: Show friendly names: "🎨 Can Create New NFTs"

### Not explaining what each role allows

Severity: high

Users grant roles without understanding implications

Instead: List specific permissions for each role

### Hiding roles granted to others

Severity: high

Owners don't know who has access to their NFTs

Instead: Show all role holders prominently

### No revocation UI

Severity: medium

Users can't easily remove permissions

Instead: One-click revoke with confirmation

## UI Components

### RoleBadge

Visual indicator of a role type
States: active, pending, revoked
Props: roleType, icon, color

### PermissionMatrix

Grid showing what each role can do
States: viewing, editing
Props: roles[], permissions[], assignments{}

### RoleAssignmentForm

Form for granting roles to addresses
States: selecting-role, entering-address, confirming, granting
Props: availableRoles[], onGrant

### RoleAuditLog

History of role changes
States: loading, loaded
Props: events[], filters

## On Monad

### Role Queries

Ethereum: Checking roles costs gas

Monad: Cheap reads for real-time role checks

Design implication: Can show live role status without caching

### Granting Speed

Ethereum: Role grants take 15+ seconds

Monad: Sub-second role assignment

Design implication: Role changes feel instant, can enable quick permission adjustments

### Bulk Operations

Ethereum: Granting multiple roles very expensive

Monad: Bulk role management affordable

Design implication: Can offer "Grant roles to multiple addresses" features

### Audit Trail

Ethereum: Fetching role history expensive

Monad: Fast event queries for audit logs

Design implication: Can show complete role change history

## Key Takeaways

- Roles = granular permissions beyond just "approved"
- Show what each role CAN and CANNOT do clearly
- Make role holders visible to NFT owners
- Provide easy revocation UI
- On Monad: fast/cheap enables real-time role management

## UX Patterns

### Role Management Dashboard

View and manage roles for an NFT or collection

User flow:

- View all roles for NFT/collection
- See who has which permissions
- Revoke roles with one click
- Add new role assignments
- View role capabilities

Mockup registry key: `concept/nft-gallery` (React UI on the live standard page).

### Grant Role Flow

Assign specific permission to an address

User flow:

- Select role type to grant
- See what permissions it includes
- Enter recipient address
- Confirm what they CAN'T do
- Sign transaction to grant

Mockup registry key: `concept/nft-gallery` (React UI on the live standard page).

### Role-Gated Actions

Show available actions based on user's role

User flow:

- User views NFT they have role for
- Show their specific role
- List what they CAN do
- Show what they CANNOT do and why
- Only enabled buttons for permitted actions

Mockup registry key: `concept/nft-gallery` (React UI on the live standard page).

### Collection Role Admin

Manage roles at collection level

User flow:

- Admin views collection roles
- See all role holders grouped by role
- Add new role holders
- Bulk revoke if needed
- Audit complete permission structure

Mockup registry key: `concept/nft-gallery` (React UI on the live standard page).

## Technical Notes

ERC-7820 defines standard roles (admin, operator, minter, burner) and allows custom roles. The contract stores role→address mappings with methods to grant, revoke, and check roles. Roles can be per-token or collection-wide. The standard integrates with ERC-721's approval system, with roles taking precedence for finer control.
