8/6 livestream: AI-Powered Figma to Storybook in Minutes

Announcing Visual Copilot - Figma to production in half the time

Builder logo
builder.io
Contact sales

8/6 livestream: AI-Powered Figma to Storybook in Minutes

Announcing Visual Copilot - Figma to production in half the time

Builder logo
builder.io

Blog

Home

Resources

Blog

Forum

Github

Login

Signup

×

Visual CMS

Drag-and-drop visual editor and headless CMS for any tech stack

Theme Studio for Shopify

Build and optimize your Shopify-hosted storefront, no coding required

Resources

Blog

Get StartedLogin

Whether you're setting up ACLs for the first time or debugging an existing configuration, this document provides practical solutions, testing strategies, and solutions to common issues.

To get the most out of this document, make sure you're familiar with Access Control List (ACL) basics.

Follow this systematic approach to verify your ACL policies work correctly and provide clear feedback to users:

  1. Start with permissive rules. Begin with broad allow rules.
  2. Add specific restrictions. Layer on deny rules for sensitive areas.
  3. Test different scenarios. Try accessing files as different user types.
  4. Verify error messages. Ensure your failMessage values are helpful.

Common scenarios to test include:

  • ✅ that users can access files they should have access to
  • ❌ that sensitive files properly protected
  • 👥 that team-based restrictions work as expected
  • 🔄 that deny rules properly override allow rules
  • 📝 that error messages clear and actionable

The ACL system is automatically integrated into all file operations in the code generation system:

  • readFile() checks read permissions.
  • writeFile() checks write permissions.
  • deleteFile() checks write permissions.
  • fileExists() checks read permissions.
  • listDir() checks list permissions.
  • stat() checks read permissions.

Structure policies with specific deny rules to override broader allow rules:

json{
  "entries": [
    {
      "action": "allow",
      "resource": "/**",
      "permissions": ["read", "write"]
    },
    {
      "action": "deny",
      "resource": "/secrets/**",
      "permissions": ["read", "write"],
      "failMessage": "Secret files are protected"
    }
  ]
}

Always include a helpful failMessage for deny rules:

json{
  "action": "deny",
  "resource": "/production/**",
  "permissions": ["write"],
  "failMessage": "Production files require manual review. Please submit changes through the standard deployment process."
}

Be as specific as possible to avoid unintended access restrictions:

json{
  "action": "deny",
  "resource": "/src/config/**/*.json",
  "permissions": ["write"],
  "failMessage": "JSON configuration files cannot be automatically modified"
}

Use different permissions for different use cases:

json{
  "entries": [
    {
      "action": "allow",
      "resource": "/logs/**",
      "permissions": ["read", "list"]
    },
    {
      "action": "allow",
      "resource": "/temp/**",
      "permissions": ["read", "write", "list"]
    },
    {
      "action": "allow",
      "resource": "/public/**",
      "permissions": ["read", "list"]
    }
  ]
}

Add comments to explain complex rules:

json{
  "entries": [
    {
      "action": "allow",
      "resource": "/src/**",
      "permissions": ["read", "write"],
      "principals": ["developer"],
      "comment": "Developers can modify all source code except production configs"
    },
    {
      "action": "deny",
      "resource": "/src/config/production.json",
      "permissions": ["write"],
      "principals": ["developer"],
      "failMessage": "Production config requires admin approval"
    }
  ]
}

This section offers potential solutions to the most frequently encountered ACL configuration issues.

  • Check if a deny rule is taking precedence over an allow rule.
  • Verify the resource pattern matches your file path exactly.
  • Make sure the permission type matches your operation.
  • Remember that patterns are case-sensitive.
  • Resource patterns use forward slashes (/) even on Windows.
  • Patterns are case-sensitive.
  • Test your patterns using online tools like globster.xyz.
  • failMessage only works on deny rules.
  • Verify the deny rule is actually the one matching your request.
  • Directory listing requires list permission, not read.
  • Make sure your policy includes list permissions for directories you need to browse.
  • Verify users have the correct principals assigned.
  • Remember that users need at least one matching principal for a rule to apply.
  • Rules without principals apply to all users.
Was this article helpful?

Product

Visual CMS

Theme Studio for Shopify

Sign up

Login

Featured Integrations

React

Angular

Next.js

Gatsby

Get In Touch

Chat With Us

Twitter

Linkedin

Careers

© 2020 Builder.io, Inc.

Security

Privacy Policy

Terms of Service

Get the latest from Builder.io

By submitting, you agree to our Privacy Policy

  • Fusion

  • Publish

  • Product Updates

  • Figma to Code Guide

  • Headless CMS Guide

  • Headless Commerce Guide

  • Composable DXP Guide

Security

Privacy Policy

SaaS Terms

Compliance

Cookie Preferences

Gartner Cool Vendor 2024