This project has been archived by its maintainers, and is no longer receiving any updates.
Micro Users - Arabic Django User Management App
Arabic lightweight, reusable Django app providing user management with abstract user, permissions, localization, and activity logging.
Requirements
- Must be installed on a fresh database.
- Python 3.11+
- Django 5.1+
- django-crispy-forms 2.4+
- django-tables2 2.7+
- django-filter 24.3+
- pillow 11.0+
- babel 2.1+
Features
- Custom AbstractUser model
- Scope Management System (Optional)
- Custom Grouped User permissions system
- Automatic Activity logging (login/logout, CRUD for all models)
- Specific User detail and log view
- Localization support
- Admin interface integration
- CRUD views and templates
- Filtering and tabulation
Future updates are planned to support dynamic language switching between RTL and LTR.
Installation
pip install git+https://github.com/debeski/micro-users.git
# OR
pip install micro-users
Configuration
- Add to
INSTALLED_APPS:
INSTALLED_APPS = [
'users', # Preferably on top
'django.contrib.admin',
'django.contrib.auth',
...
]
- Add Middleware in
settings.py(Required for logging):
MIDDLEWARE = [
# ...
'django.contrib.auth.middleware.AuthenticationMiddleware',
# ...
'users.middleware.ActivityLogMiddleware', # Add this line
]
- Add Context Processor in
settings.py(Optional, forscope_enabledvariable in templates):
TEMPLATES = [
{
# ...
'OPTIONS': {
'context_processors': [
# ...
'users.context_processors.scope_settings', # Add this line
],
},
},
]
- Set custom user model in
settings.py:
AUTH_USER_MODEL = 'users.CustomUser'
- Include URLs in your main project folder
urls.py:
urlpatterns = [
...
path('manage/', include('users.urls')),
]
- Run migrations:
python manage.py migrate users
How to Use
Once configured, the app automatically handles user management and activity logging. Ensure your project has a base.html template in the root templates directory, as all user management templates extend it.
Activity Logging
The app provides a fully automated activity logging system. No manual configuration is required in your views.
- Login/Logout: Automatically tracked.
- Create/Update/Delete: Any change to any model in your app (including
ScopeandUser) is automatically logged via Django Signals. - Log content: Tracks the user, action type, model name, object ID, and timestamp.
- Note:
last_loginfield updates are automatically filtered out to prevent redundant "Update" logs on login.
- Note:
To view logs, navigate to manage/logs/ or use the Django Admin interface ("حركات السجل").
Available URLs
All user management URLs are prefixed with manage/ as configured above. Below is the complete list:
| URL Pattern | View/Function | Description |
|---|---|---|
manage/login/ |
auth_views.LoginView.as_view() |
User login |
manage/logout/ |
auth_views.LogoutView.as_view() |
User logout |
manage/users/ |
views.UserListView.as_view() |
List all users |
manage/users/create/ |
views.create_user |
Create new user |
manage/users/edit/<int:pk>/ |
views.edit_user |
Edit existing user |
manage/users/delete/<int:pk>/ |
views.delete_user |
Delete user |
manage/users/<int:pk>/ |
views.UserDetailView.as_view() |
View user details |
manage/profile |
views.user_profile |
View current user profile |
manage/profile/edit/ |
views.edit_profile |
Edit current profile |
manage/logs/ |
views.UserActivityLogView.as_view() |
View activity logs |
manage/reset_password/<int:pk>/ |
views.reset_password |
Reset user password |
manage/scopes/manage/ |
views.manage_scopes |
Scope Manager (Modal) |
Structure
users/
├── views.py # CRUD operations
├── urls.py # URL routing
├── tables.py # User and Activity Log tables
├── signals.py # Logging signals
├── middleware.py # Request capture for signals
├── models.py # User model, permissions, activity logs
├── forms.py # Creation, edit,. etc.
├── filter.py # Search filters
├── apps.py # Permissions Localization
├── admin.py # Admin UI integration
├── __init__.py # Python init
├── templates/ # HTML templates (includes partials)
├── static/ # CSS classes
└── migrations/ # Database migrations
Customization
Replacing Login Logo
To replace the default login logo, simply place your own login_logo.webp image in your project's static directory at static/img/login_logo.webp.
Version History
| Version | Changes |
|---|---|
| v1.0.0 | • Initial release as pip package |
| v1.0.1 | • Fixed a couple of new issues as a pip package |
| v1.0.2 | • Fixed the readme and building files |
| v1.0.3 | • Still getting the hang of this pip publish thing |
| v1.0.4 | • Honestly still messing with and trying settings and stuff out |
| v1.1.0 | • OK, finally a working seamless micro-users app |
| v1.1.1 | • Fixed an expolit where a staff member could disable the ADMIN user |
| v1.2.0 | • Added User Details view with specific user activity log |
| v1.2.1 | • Fixed a minor import bug |
| v1.2.2 | • Separated user detail view from table for consistency • Optimized the new detail + log view for optimal compatibiliyy with users |
| v1.2.3 | • Fixed a couple of visual inconsistencies |
| v1.3.0 | • Patched a critical security permission issue • Disabled ADMIN from being viewed/edited from all other members • Fixed a crash when sorting with full_name • Enabled Logging for all actions |
| v1.3.1 | • Corrected a misplaced code that caused a crash when editing profile |
| v1.3.2 | • Minor table modifications |
| v1.4.0 | • Redesigned Permissions UI (Grouped by App/Action) • Added Global Bulk Permission Selectors • Improved Arabic Localization for Permissions • Optimized printing (hidden forms/buttons) • Fixed various bugs and crashes |
| v1.4.1 | • Changed "Administrative User" translation to "Responsible User" (مستخدم مسؤول) • Enforced custom sorting order for Permissions (View -> Add -> Change -> Other) |
| v1.5.0 | • Department Management (Modal-based CRUD) • Department field implementation • Template refactoring (partials/, profile/, users/ for logs) • Verbose names for models |
| v1.6.0 | • Automated Activity Logging: dynamic logging for all CREATE/UPDATE/DELETE actions via Middleware & Signals • Refactor: Renamed Department model to Scope (Scope Management)• Removed manual logging requirement • Architecture: Decoupled models, forms, and tables using dynamic imports and apps.get_model • Soft Delete: Users are now marked as inactive with a timestamp instead of being permanently deleted • Activity Log: Deleted users appear with a strikethrough • CSS Refactor: Extracted and cleaned up styling with CSS variables • Login: Refactored login page with separated JS/CSS and a new modern default logo |
| v1.6.1 | • Theme Configuration: Added MICRO_USERS_THEME setting for easy color customization • Bug Fixes: Explicitly excluded unwanted columns (id, ip_address, user_agent) from Activity Log table • UI: Improved Scope Manager button visibility |
| v1.6.2 | • UI: Improved some tooltips for buttons and descriptions |
| v1.6.3 | • Bug Fixes: Fixed a crash with table tooltips "disabled" |
| v1.7.0 | • New Theme: Complete visual overhaul with modern, consistent styling • Refactor: Updated Login, Profile, and Detail templates for better UX • Feature: Added Scope filter to Activity Logs (superuser only) • UX: Clear button in filters now preserves current sort order |
| v1.7.1 | • Bug Fixes: Fixed login/next url was not being passed correctly |
| v1.8.0 | • Permissions UI: Complete redesign with App/Model-based grouping and hierarchical checkboxes • Aesthetics: Applied modern glassmorphism theme to permission cards with interactive toggles • Security: Implemented 3-level security logic (GM, SM, User) and "invisible" Superuser protection • Foolproofing: Added self-editing protection for staff and scope enforcement for managers • Localization: Fully translated system auth labels and metadata to Arabic |
| v1.8.1 | • UI Refinement: Swapped Email and Phone positions across all forms, tables, and detail views• Field Logic: Set Email and Phone as optional (not required) for all users• Security: Added manage_staff custom permission to restrict is_staff management to authorized managers only• Bug Fix: Reserved manage_staff assignment power strictly for Superusers and fixed UI grouping for custom permissions |
| v1.8.2 | • Login UX: Enhanced login flow with auto-focus on username and improved "Enter to Submit" handling |
| v1.8.3 | • CSP Compliance: Added nonce attribute support to all inline and external script tags (Login, Permissions, Manage Users) for Content Security Policy compliance |
| v1.8.4 | • Strict CSP: Refactored inline JS event handlers to use Event Listeners, fully resolving CSP violation errors |
| v1.8.5 | • Optional Scopes: Added ability for Superusers to toggle Scope system ON/OFF via User Management interface |
| v1.8.6 | • Strict CSP Repair: Fixed remaining inline event handlers in User Management pages (manage_users, scope_form) that were violating CSP directives, moving all logic to external manage_users.js |
| v1.8.7 | • Fixed a couple of template tab title mismatches |
| v1.8.8 | • Fixed a couple of template content title mismatches and classes |
| v1.8.9 | • Fixed migrations |
| v1.9.0 | • UI Overhaul: Unified all buttons, and clssses to conform to themes, rounded corners, and improved spacing |
Metadata
Release files for micro-users 1.9.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| micro_users-1.9.0.tar.gz | 70.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| micro_users-1.9.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 150.8 kB
Release files / micro_users-1.9.0.tar.gz
| Download URL | micro_users-1.9.0.tar.gz |
|---|---|
| Size | 70.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5091bfcfe0c4556c22b13b8babdeef6414c4ede0aedf223eb53da8b3d63eb4aa
|
|
BLAKE2b-256 checksum How to use checksums |
36f0d082084dae64bd414bc1fc7cade936948020da8cb016c38a5c1749c0f6d6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.0.0 CPython/3.12.3
|
Release files / micro_users-1.9.0-py3-none-any.whl
| Download URL | micro_users-1.9.0-py3-none-any.whl |
|---|---|
| Size | 80.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
40adaebc1e67aecf2bfef0615a1aa76c904511391bdf4105199b600a7391c2ba
|
|
BLAKE2b-256 checksum How to use checksums |
c09d7777e11d5d1af02b0c5cbf71823554be2bc10a06587cfd31774120f75f56
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.0.0 CPython/3.12.3
|
Security for micro-users 1.9.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.