Skip to main content

AccessManager

The AccessManager class provides role-based access control (RBAC) functionality for Framefox applications. It evaluates access control rules and determines whether users have the required permissions to access specific paths. Source: framefox/core/security/access_manager.py:17

Constructor

AccessManager(settings: Settings)
settings
Settings
required
The application settings containing access control configuration

Methods

get_required_roles()

Retrieves the required roles for a specific path from the access control configuration.
def get_required_roles(self, path: str) -> List[str]
path
str
required
The request path to evaluate
return
List[str]
List of role names required to access the path. Empty list means no roles required.
How it works:
  1. Checks if the path is a static resource (automatically allowed)
  2. Iterates through access control rules in order
  3. Matches path against regex patterns
  4. Returns roles for the first matching rule
  5. Falls back to default policy if no rules match
Example:
from framefox.core.security.access_manager import AccessManager
from framefox.core.config.settings import Settings

settings = Settings()
access_manager = AccessManager(settings)

# Check required roles for a path
roles = access_manager.get_required_roles("/admin/dashboard")
print(roles)  # ['ROLE_ADMIN']

is_allowed()

Checks if the user has at least one of the required roles.
def is_allowed(self, user_roles: List[str], required_roles: List[str]) -> bool
user_roles
List[str]
required
List of roles the user possesses
required_roles
List[str]
required
List of roles required for access
return
bool
True if access is allowed, False otherwise
Special Cases:
  • If IS_AUTHENTICATED_ANONYMOUSLY is in required_roles, access is always granted
  • If required_roles is empty, access is always granted
  • If user_roles is empty and roles are required, access is denied
Example:
user_roles = ["ROLE_USER", "ROLE_EDITOR"]
required_roles = ["ROLE_ADMIN", "ROLE_EDITOR"]

if access_manager.is_allowed(user_roles, required_roles):
    print("Access granted")
else:
    print("Access denied")

Access Control Configuration

Access control rules are defined in config/security.yaml:
access_control:
  - path: "^/admin"
    roles: [ROLE_ADMIN]
  - path: "^/api"
    roles: [ROLE_USER]
  - path: "^/public"
    roles: [IS_AUTHENTICATED_ANONYMOUSLY]

default_access_policy: allow  # or "deny"

Default Access Policy

  • allow (default): Paths without matching rules are accessible to all users
  • deny: Paths without matching rules require ROLE_ADMIN

Complete Example

from framefox.core.security.access_manager import AccessManager
from framefox.core.config.settings import Settings

# Initialize access manager
settings = Settings()
access_manager = AccessManager(settings)

# Example user with roles
user_roles = ["ROLE_USER", "ROLE_EDITOR"]

# Check access to different paths
paths = [
    "/admin/users",
    "/api/posts",
    "/public/about",
]

for path in paths:
    required_roles = access_manager.get_required_roles(path)
    allowed = access_manager.is_allowed(user_roles, required_roles)
    print(f"{path}: {'✓ Allowed' if allowed else '✗ Denied'} (requires {required_roles})")

Integration with Middleware

The AccessManager is automatically used by Framefox’s firewall middleware to enforce access control:
# In firewall middleware
access_manager = container.get(AccessManager)
required_roles = access_manager.get_required_roles(request.url.path)

if not access_manager.is_allowed(user_roles, required_roles):
    raise HTTPException(status_code=403, detail="Access denied")

See Also

Authentication

User authentication system

Security Guide

Complete security documentation

Build docs developers (and LLMs) love