Skip to main content

A flexible Django app for feature-based role-based access control (RBAC)

Project description

LDC Dashboard RBAC - Django Feature-Based Role Access Control

A lightweight, backend-only Django app for implementing feature-based role-based access control (RBAC) with group-level permissions.

Features

  • 🔐 Feature-based permissions - Control access to specific features/views
  • 👥 Group management - Organize users into groups with shared permissions
  • 🎚️ Permission levels - Support for read, write, and admin access levels
  • 🔧 Flexible configuration - Works with any authentication system
  • Performance optimized - Built-in caching and bulk operations
  • 🛠️ Management commands - CLI tools for feature synchronization
  • 🎯 Backend only - No frontend dependencies, use your own UI
  • 📦 Lightweight - Minimal dependencies, maximum flexibility

Installation

pip install ldc-dashboard-rbac

Quick Start

  1. Add ldc_dashboard_rbac to your INSTALLED_APPS:
INSTALLED_APPS = [
    # ... your apps
    'ldc_dashboard_rbac',
]
  1. Configure the package in your settings:
# User getter function - adapt to your authentication system
def get_current_user(request):
    return getattr(request, 'user', None)

def is_super_admin(user):
    return user and user.is_superuser

def can_manage_rbac(user):
    return user and user.is_staff

GROUP_RBAC = {
    'USER_MODEL': 'auth.User',  # Your user model
    'USER_GETTER': get_current_user,
    'SUPER_ADMIN_CHECK': is_super_admin,
    'ADMIN_CHECK': can_manage_rbac,
}
  1. Run migrations:
python manage.py migrate
  1. Sync features from your URLs:
python manage.py sync_features

Usage

In Views (Decorators)

from ldc_dashboard_rbac.decorators import feature_required

@feature_required('user_management')
def user_list(request):
    # Only users with 'user_management' feature access can view this
    return render(request, 'users/list.html')

@feature_required('user_management', permission_level='admin')
def user_delete(request, user_id):
    # Only users with admin-level access to user_management
    return redirect('user_list')

In Class-Based Views

from ldc_dashboard_rbac.decorators import FeatureRequiredMixin

class UserManagementView(FeatureRequiredMixin, ListView):
    required_feature = 'user_management'
    required_permission_level = 'write'
    model = User

Programmatic Permission Checking

from ldc_dashboard_rbac.permissions import user_has_feature_permission, get_user_features

# Check single permission
if user_has_feature_permission(request.user, 'user_management', 'write'):
    # User can edit users
    pass

# Get all user's features
user_features = get_user_features(request.user)
for feature in user_features:
    print(f"User has access to: {feature.name}")

# Bulk permission check (more efficient)
from ldc_dashboard_rbac.permissions import bulk_check_permissions
permissions = bulk_check_permissions(
    request.user, 
    ['user_management', 'admin_panel', 'reports'],
    'read'
)
# Returns: {'user_management': True, 'admin_panel': False, 'reports': True}

In Your Own Templates

Since this is backend-only, you implement your own template logic:

# In your view
def my_view(request):
    from ldc_dashboard_rbac.permissions import user_has_feature_permission
    
    context = {
        'can_manage_users': user_has_feature_permission(request.user, 'user_management'),
        'can_view_reports': user_has_feature_permission(request.user, 'reports', 'read'),
        'is_admin': user_has_feature_permission(request.user, 'admin_panel', 'admin'),
    }
    return render(request, 'my_template.html', context)
<!-- In your template -->
{% if can_manage_users %}
    <a href="{% url 'user_list' %}">Manage Users</a>
{% endif %}

{% if is_admin %}
    <button class="delete-user">Delete User</button>
{% endif %}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ldc_dashboard_rbac-1.0.0.tar.gz (15.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ldc_dashboard_rbac-1.0.0-py3-none-any.whl (17.2 kB view details)

Uploaded Python 3

File details

Details for the file ldc_dashboard_rbac-1.0.0.tar.gz.

File metadata

  • Download URL: ldc_dashboard_rbac-1.0.0.tar.gz
  • Upload date:
  • Size: 15.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.0

File hashes

Hashes for ldc_dashboard_rbac-1.0.0.tar.gz
Algorithm Hash digest
SHA256 6e9b288a844ce49b43062b3ec616c020b9f44d88590fcad4dec40013640f8482
MD5 c91d9d8c5ceecb3c0578ce6252b28e7d
BLAKE2b-256 2190c83481c0bf0577fb994ff60559bf1803e10485d9325d9b91cc69fb2ac124

See more details on using hashes here.

File details

Details for the file ldc_dashboard_rbac-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ldc_dashboard_rbac-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 75101bb174902ddc3ea64a0589a530a352c91b3f05cd618baaa0ed8ab463d1b9
MD5 a166153cf8ae551a842764a5a6d00dbf
BLAKE2b-256 e7c949b01f0c0eeedc1888110268dd84756ce610e2838d8cea66dd6e221a4497

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page