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
- Add
ldc_dashboard_rbacto yourINSTALLED_APPS:
INSTALLED_APPS = [
# ... your apps
'ldc_dashboard_rbac',
]
- 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,
}
- Run migrations:
python manage.py migrate
- 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
Release history Release notifications | RSS feed
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)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e9b288a844ce49b43062b3ec616c020b9f44d88590fcad4dec40013640f8482
|
|
| MD5 |
c91d9d8c5ceecb3c0578ce6252b28e7d
|
|
| BLAKE2b-256 |
2190c83481c0bf0577fb994ff60559bf1803e10485d9325d9b91cc69fb2ac124
|
File details
Details for the file ldc_dashboard_rbac-1.0.0-py3-none-any.whl.
File metadata
- Download URL: ldc_dashboard_rbac-1.0.0-py3-none-any.whl
- Upload date:
- Size: 17.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
75101bb174902ddc3ea64a0589a530a352c91b3f05cd618baaa0ed8ab463d1b9
|
|
| MD5 |
a166153cf8ae551a842764a5a6d00dbf
|
|
| BLAKE2b-256 |
e7c949b01f0c0eeedc1888110268dd84756ce610e2838d8cea66dd6e221a4497
|