Bird
Raised Fist0
Flaskframework~5 mins

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

Choose your learning style10 modes available
Recall & Review
beginner
What is Role-based Access Control (RBAC)?
RBAC is a way to control who can do what in an app by assigning roles to users. Each role has permissions that allow certain actions.
Click to reveal answer
intermediate
How do you define roles in a Flask app using Flask-Login and Flask-Principal?
You create roles as strings or database entries and assign them to users. Flask-Principal helps check these roles to allow or deny access.
Click to reveal answer
beginner
What is the purpose of the @login_required decorator in Flask?
It ensures that only logged-in users can access a route. It is often combined with role checks for RBAC.
Click to reveal answer
intermediate
How can you restrict a Flask route to only users with the 'admin' role?
You check the user's roles inside the route or use Flask-Principal's @roles_required('admin') decorator to allow access only to admins.
Click to reveal answer
beginner
Why is RBAC better than giving permissions directly to users?
RBAC makes managing permissions easier by grouping them into roles. When a user's role changes, their permissions update automatically.
Click to reveal answer
In Flask RBAC, what does a 'role' represent?
AA database table
BA user’s password
CA Flask extension
DA group of permissions assigned to users
Which Flask extension helps manage user sessions and login status?
AFlask-WTF
BFlask-Migrate
CFlask-Login
DFlask-SQLAlchemy
What decorator would you use to require a user to be logged in before accessing a route?
A@login_required
B@roles_required
C@app.route
D@permission_required
How do you check if a user has the 'admin' role in Flask?
ACheck if 'admin' is in user.roles
BCheck if user.is_admin is True
CCheck if user.password == 'admin'
DCheck if user.id == 'admin'
Why is it better to assign roles instead of individual permissions to users?
AUsers prefer roles over permissions
BRoles simplify permission management
CPermissions are not secure
DRoles make the app slower
Explain how Role-based Access Control works in a Flask application.
Think about how you decide who can enter certain rooms in a building.
You got /4 concepts.
    Describe how you would implement a route that only 'admin' users can access in Flask.
    Consider using decorators and role membership checks.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of role-based access control (RBAC) in a Flask application?
      easy
      A. To automatically generate user interfaces
      B. To speed up the Flask server response time
      C. To restrict user actions based on their assigned roles
      D. To store user passwords securely

      Solution

      1. Step 1: Understand RBAC concept

        RBAC means users can only do things allowed by their roles, like admin or user.
      2. Step 2: Identify RBAC purpose in Flask

        In Flask, RBAC limits access to routes or actions based on roles.
      3. Final Answer:

        To restrict user actions based on their assigned roles -> Option C
      4. Quick Check:

        RBAC = restrict actions by role [OK]
      Hint: RBAC controls what users can do by their role [OK]
      Common Mistakes:
      • Confusing RBAC with performance optimization
      • Thinking RBAC manages UI generation
      • Mixing RBAC with password security
      2. Which Flask decorator is commonly used to protect a route so only logged-in users with a specific role can access it?
      easy
      A. @csrf_protect
      B. @login_required
      C. @app.route
      D. @role_required('admin')

      Solution

      1. Step 1: Identify decorators for access control

        @login_required ensures user is logged in but does not check role.
      2. Step 2: Find decorator checking specific role

        @role_required('admin') restricts access to users with 'admin' role.
      3. Final Answer:

        @role_required('admin') -> Option D
      4. Quick Check:

        Role check decorator = @role_required [OK]
      Hint: Use @role_required to check user roles on routes [OK]
      Common Mistakes:
      • Using @login_required alone for role checks
      • Confusing @app.route with access control
      • Mistaking @csrf_protect for role restriction
      3. Given this Flask route code snippet:
      @app.route('/dashboard')
      @role_required('editor')
      def dashboard():
          return 'Welcome Editor'

      What happens if a logged-in user with role 'viewer' tries to access '/dashboard'?
      medium
      A. They get redirected or denied access
      B. They can access but with limited features
      C. They get a server error
      D. They see 'Welcome Editor' message

      Solution

      1. Step 1: Understand role_required decorator effect

        @role_required('editor') allows only users with 'editor' role to access the route.
      2. Step 2: Check user role 'viewer' against required 'editor'

        User role 'viewer' does not match 'editor', so access is denied or redirected.
      3. Final Answer:

        They get redirected or denied access -> Option A
      4. Quick Check:

        Role mismatch = access denied [OK]
      Hint: Role mismatch blocks access, not error or partial view [OK]
      Common Mistakes:
      • Assuming wrong role still shows content
      • Expecting server error on role mismatch
      • Thinking partial access is automatic
      4. Consider this Flask code snippet:
      @app.route('/admin')
      @role_required('admin')
      def admin_panel():
          return 'Admin Panel'

      Which of the following is a common mistake that would cause this role check to fail?
      medium
      A. Not importing the role_required decorator
      B. Using @app.route after @role_required
      C. Returning a string instead of JSON
      D. Defining the function without parentheses

      Solution

      1. Step 1: Check decorator usage

        role_required must be imported to work; missing import causes failure.
      2. Step 2: Verify other options

        @app.route order is flexible; returning string is valid; function definition syntax is correct.
      3. Final Answer:

        Not importing the role_required decorator -> Option A
      4. Quick Check:

        Missing import breaks decorator [OK]
      Hint: Always import decorators before use [OK]
      Common Mistakes:
      • Assuming decorator order always matters
      • Confusing return type with access control
      • Syntax errors in function definition
      5. You want to create a Flask route /settings that only users with roles 'admin' or 'manager' can access. Which code snippet correctly implements this role-based access control?
      hard
      A.
      @app.route('/settings')
      @role_required('admin')
      @role_required('manager')
      def settings():
          return 'Settings Page'
      B.
      @app.route('/settings')
      def settings():
          if current_user.role in ['admin', 'manager']:
              return 'Settings Page'
          return 'Access Denied'
      C.
      @app.route('/settings')
      @role_required(['admin', 'manager'])
      def settings():
          return 'Settings Page'
      D.
      @app.route('/settings')
      @role_required('admin' or 'manager')
      def settings():
          return 'Settings Page'

      Solution

      1. Step 1: Analyze multiple role checks

        @app.route('/settings')
        @role_required('admin')
        @role_required('manager')
        def settings():
            return 'Settings Page'
        stacks decorators, which requires both roles simultaneously, not either/or.
      2. Step 2: Check list role check in decorator

        @app.route('/settings')
        @role_required(['admin', 'manager'])
        def settings():
            return 'Settings Page'
        assumes role_required accepts list, which may not be supported by default.
      3. Step 3: Evaluate logical or misuse

        @app.route('/settings')
        @role_required('admin' or 'manager')
        def settings():
            return 'Settings Page'
        uses 'admin' or 'manager' which evaluates to 'admin' always, incorrect.
      4. Step 4: Confirm manual role check

        @app.route('/settings')
        def settings():
            if current_user.role in ['admin', 'manager']:
                return 'Settings Page'
            return 'Access Denied'
        manually checks if user role is in allowed list, correctly allowing either role.
      5. Final Answer:

        Option B code with manual role check -> Option B
      6. Quick Check:

        Manual role list check allows multiple roles [OK]
      Hint: Use if-check for multiple roles if decorator lacks list support [OK]
      Common Mistakes:
      • Stacking decorators for multiple roles (AND instead of OR)
      • Passing list directly to decorator without support
      • Using 'or' inside decorator argument incorrectly
      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