Bird
Raised Fist0
GraphQLquery~5 mins

Role-based access control in GraphQL - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is Role-based Access Control (RBAC)?
RBAC is a method to restrict system access to authorized users based on their roles. Each role has specific permissions that define what actions users can perform.
Click to reveal answer
beginner
In RBAC, what is a 'role'?
A role is a named collection of permissions that define what actions a user assigned to that role can perform in the system.
Click to reveal answer
intermediate
How does RBAC improve security in applications?
RBAC limits access by assigning users only the permissions needed for their role, reducing the risk of unauthorized actions and simplifying permission management.
Click to reveal answer
beginner
What is the difference between a user and a role in RBAC?
A user is an individual who accesses the system, while a role is a set of permissions. Users are assigned roles to gain the permissions associated with those roles.
Click to reveal answer
intermediate
Give an example of how RBAC might be used in a GraphQL API.
In a GraphQL API, RBAC can restrict queries and mutations based on user roles. For example, only users with the 'admin' role can perform mutations that delete data.
Click to reveal answer
What does RBAC stand for?
ARead-Back Access Control
BRandom Binary Access Code
CRole-based Access Control
DRole Binding Access Code
In RBAC, who gets assigned roles?
APermissions
BServers
CDatabases
DUsers
Which of these is a benefit of RBAC?
ASimplifies permission management
BAllows all users full access
CRemoves the need for passwords
DAutomatically creates roles
In a GraphQL API, how can RBAC be applied?
ABy disabling the API for some users
BBy restricting queries and mutations based on user roles
CBy encrypting all data automatically
DBy changing the schema dynamically
Which is NOT part of RBAC?
AIP addresses
BUsers
CPermissions
DRoles
Explain how Role-based Access Control works in a system.
Think about how users get permissions through roles.
You got /4 concepts.
    Describe how you would implement RBAC in a GraphQL API.
    Consider how to control who can run which GraphQL operations.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of role-based access control (RBAC) in GraphQL APIs?
      easy
      A. To format the response data
      B. To speed up query execution
      C. To restrict data access based on user roles
      D. To cache query results

      Solution

      1. Step 1: Understand RBAC concept

        RBAC limits what data users can access depending on their assigned roles.
      2. Step 2: Identify RBAC purpose in GraphQL

        In GraphQL, RBAC ensures users only see or modify data allowed by their role.
      3. Final Answer:

        To restrict data access based on user roles -> Option C
      4. Quick Check:

        RBAC = restrict access by role [OK]
      Hint: RBAC controls who can see or change data [OK]
      Common Mistakes:
      • Confusing RBAC with performance optimization
      • Thinking RBAC formats data output
      • Assuming RBAC caches data
      2. Which of the following is the correct way to apply a role-based directive in a GraphQL schema to restrict a query to admins only?
      easy
      A. type Query { users: [User] @hasRole(role: "admin") }
      B. type Query { users: [User] @roleCheck("admin") }
      C. type Query { users: [User] @auth(role: "admin") }
      D. type Query { users: [User] @access(role = admin) }

      Solution

      1. Step 1: Identify correct directive syntax

        The standard directive for role checks is @hasRole with a role argument as a string.
      2. Step 2: Match syntax to options

        type Query { users: [User] @hasRole(role: "admin") } uses @hasRole(role: "admin"), which is the correct syntax.
      3. Final Answer:

        type Query { users: [User] @hasRole(role: "admin") } -> Option A
      4. Quick Check:

        @hasRole(role: "admin") syntax correct [OK]
      Hint: Look for @hasRole with role as string argument [OK]
      Common Mistakes:
      • Using incorrect directive names like @auth or @roleCheck
      • Missing quotes around role name
      • Using = instead of : in directive arguments
      3. Given this GraphQL query protected by @hasRole(role: "editor"), what will happen if a user with role "viewer" tries to run it?
      query { editArticle(id: "123") { title content } }
      medium
      A. The query returns an authorization error
      B. The query returns empty data with no error
      C. The query returns the article data as usual
      D. The query causes a server crash

      Solution

      1. Step 1: Understand role restriction effect

        @hasRole(role: "editor") restricts access to users with the editor role only.
      2. Step 2: Check user role against required role

        User has role "viewer", which does not match "editor", so access is denied.
      3. Final Answer:

        The query returns an authorization error -> Option A
      4. Quick Check:

        Role mismatch = authorization error [OK]
      Hint: Role mismatch causes authorization error [OK]
      Common Mistakes:
      • Assuming query returns data anyway
      • Thinking query returns empty data silently
      • Believing server crashes on role denial
      4. You wrote this schema directive to restrict a mutation to admins:
      type Mutation { deleteUser(id: ID!): Boolean @hasRole(role: admin) }

      Why does this cause a syntax error?
      medium
      A. The directive name @hasRole is invalid
      B. ID! is not a valid type
      C. Mutation type cannot have directives
      D. The role value admin is missing quotes

      Solution

      1. Step 1: Check directive argument syntax

        Directive arguments require string values in quotes, e.g., role: "admin".
      2. Step 2: Identify missing quotes error

        Here, role: admin lacks quotes, causing a syntax error.
      3. Final Answer:

        The role value admin is missing quotes -> Option D
      4. Quick Check:

        Directive string args need quotes [OK]
      Hint: Always put role names in quotes in directives [OK]
      Common Mistakes:
      • Thinking directive names are wrong
      • Believing directives can't be on mutations
      • Misunderstanding ID! type syntax
      5. You want to allow only users with roles "admin" or "manager" to update product prices. Which schema directive setup correctly enforces this in GraphQL?
      hard
      A. type Mutation { updatePrice(id: ID!, price: Float): Product @hasAnyRole(roles: ["admin", "manager"]) }
      B. type Mutation { updatePrice(id: ID!, price: Float): Product @hasRole(role: ["admin", "manager"]) }
      C. type Mutation { updatePrice(id: ID!, price: Float): Product @hasRole(role: "admin") @hasRole(role: "manager") }
      D. type Mutation { updatePrice(id: ID!, price: Float): Product @hasRole(roles: "admin,manager") }

      Solution

      1. Step 1: Understand multi-role directive syntax

        @hasRole accepts an array of roles to allow multiple roles access.
      2. Step 2: Evaluate options for correct syntax

        type Mutation { updatePrice(id: ID!, price: Float): Product @hasRole(role: ["admin", "manager"]) } uses @hasRole(role: ["admin", "manager"]), which correctly passes an array of roles.
      3. Step 3: Identify incorrect options

        type Mutation { updatePrice(id: ID!, price: Float): Product @hasRole(roles: "admin,manager") } passes a string, not an array; C uses multiple directives which may not combine logically; A uses a non-standard directive @hasAnyRole.
      4. Final Answer:

        type Mutation { updatePrice(id: ID!, price: Float): Product @hasRole(role: ["admin", "manager"]) } -> Option B
      5. Quick Check:

        Array of roles in @hasRole = correct [OK]
      Hint: Use array syntax for multiple roles in @hasRole [OK]
      Common Mistakes:
      • Passing roles as comma string instead of array
      • Using multiple @hasRole directives expecting OR logic
      • Using non-standard directive names
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard