Role-based access control (RBAC) means the role decides what someone can do, not the person. For a social media team you need six roles, not twenty: creator, editor, approver, publisher, analyst, admin. Scope each person to specific client accounts so nobody sees work that is not theirs, then keep a record of who approved what.
Agencies usually fail in one of two directions. Everyone shares one login, or every post waits on the founder. Both are fixable in an afternoon.
TLDR: Six roles, scoped per client, with approvals as the gate and every sign-off on record. Per-person exceptions are the thing that makes the whole model unmaintainable.
The six roles that cover almost every team
| Role | Can do | Cannot do |
|---|---|---|
| Creator | Draft posts, upload assets | Publish, connect accounts |
| Editor | Edit any draft in scope, submit for approval | Approve their own work |
| Approver | Approve, reject, comment on drafts | Edit connected accounts |
| Publisher | Schedule and publish approved posts | Approve, add users |
| Analyst | Read analytics, export reports | Touch content |
| Admin | Connect accounts, manage users and roles | Nothing, so keep it to two people |
Two rules stop this from rotting. Nobody approves their own work, and admin stays with exactly two people so there is always a backup and never a committee.
Resist per-person permissions. The moment you have "Sarah, but she can also publish on Thursdays", you have a setup nobody can audit six months later. Handle the exception with a temporary role change, then put it back.
Scope: the part agencies get wrong
A role on its own is not enough. A creator on Client A must not be able to see Client B. That is scope, and it is the first thing to break when an agency outgrows one shared login.
Scope on three axes:
- Client or brand. The hard boundary. Contractors get exactly one.
- Channel. Someone can own Instagram and TikTok without touching the LinkedIn company page.
- Stage. Draft access never implies publish access.
This needs real separation, not a filter. If a contractor can change the account picker and land in another client's inbox, you have a default view rather than isolation. Workspaces is how Mydrop draws that line: each client is its own space with its own members, calendar and connected accounts.
Client stakeholders are a different problem. Most of them should not be users at all. A no-login client portal lets them review and approve their own content without a seat, a password, or a permission level you maintain forever after the project ends.
Approvals are the gate, not the seniority ladder
Permissions decide who can act. Approvals decide when. Keep the two separate, or you will start making people admins just to unblock a Friday post.
Route by risk, not by job title:
| Content | Reviewers |
|---|---|
| Templated, recurring posts | One editor |
| New campaign or a new claim | Client or brand lead |
| Regulated, legal, or crisis | Named legal reviewer, no fallback |
Give the first two rows a fallback approver so a holiday does not stop publishing. The third row should genuinely block. Approval workflows hold the post until the sign-offs land, which keeps "approved" and "published" as one record instead of two lists you reconcile by hand.
What your audit log has to record
"Who changed this?" always arrives at the worst possible moment, and a log that only stores the current state cannot answer it.
Record five things per action:
- Who did it, as a named person and never a shared account.
- What role they held at the time. People change roles, and a log that resolves the role at read time quietly rewrites history.
- What changed, with the previous version still readable.
- When, with a timezone.
- Which approval it published under.
Two practical rules. Keep approval records longer than operational logs, because the approval is what anyone actually asks for. And make them searchable by client and date range, because that is the shape every audit request arrives in.
Comparing vendors on this is easy: ask each one to pull up the approval history for a specific post from three months ago. It either exists in the demo or it does not.
What to check before you buy
The features that separate a real permission model from a settings page:
- Roles definable per client, not one global role per user.
- Isolation that survives the account switcher, tested with an actual contractor login.
- Approval routing with named reviewers and a defined fallback.
- Exportable approval history for a single post.
- Reviewer access without a seat, so client sign-off does not cost a license.
- SSO and directory provisioning if IT owns your user list. Most social tools reserve this for enterprise plans, so ask in the first call rather than at contract stage.
Planable and Sprout Social both handle multi-step approvals with defined roles. Mydrop puts per-client workspaces, roles, comments on the draft itself, approval gates and the no-login reviewer link in one system, which is the combination agencies most often assemble from two separate tools. For the rest of the operating setup around it, social media agencies covers the wider stack.
Set it up this week
Three steps, in this order:
- List every human who can publish today. Include former contractors and the shared login. The list is always longer than anyone expects.
- Give each one a single role and a single client scope. No exceptions on the first pass.
- Move client stakeholders to review links and delete their user accounts.
Put a 90-day reminder in the calendar to run step one again, because stale access is the failure that comes back every time. You can start free and have the roles and client workspaces mapped before the next campaign starts.














































Google review
Trustpilot review