Skip to content

Commit 01632e2

Browse files
authored
Merge pull request #180 from benavlabs/crudadmin-added
add CRUDAdmin for admin panel
2 parents b88fe20 + 26caaf0 commit 01632e2

File tree

15 files changed

+1789
-19
lines changed

15 files changed

+1789
-19
lines changed

README.md

Lines changed: 151 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,11 @@ This README provides a quick reference for LLMs and developers, but the full doc
7474
- 🏬 Easy redis caching
7575
- 👜 Easy client-side caching
7676
- 🚦 ARQ integration for task queue
77-
- ⚙️ Efficient and robust queries with <a href="https://github.com/igorbenav/fastcrud">fastcrud</a>
78-
- ⎘ Out of the box offset and cursor pagination support with <a href="https://github.com/igorbenav/fastcrud">fastcrud</a>
77+
- ⚙️ Efficient and robust queries with <a href="https://github.com/benavlabs/fastcrud">fastcrud</a>
78+
- ⎘ Out of the box offset and cursor pagination support with <a href="https://github.com/benavlabs/fastcrud">fastcrud</a>
7979
- 🛑 Rate Limiter dependency
8080
- 👮 FastAPI docs behind authentication and hidden based on the environment
81+
- 🔧 Modern and light admin interface powered by [CRUDAdmin](https://github.com/benavlabs/crudadmin)
8182
- 🚚 Easy running with docker compose
8283
- ⚖️ NGINX Reverse Proxy and Load Balancing
8384

@@ -114,9 +115,10 @@ This README provides a quick reference for LLMs and developers, but the full doc
114115
1. [ARQ Job Queues](#510-arq-job-queues)
115116
1. [Rate Limiting](#511-rate-limiting)
116117
1. [JWT Authentication](#512-jwt-authentication)
117-
1. [Running](#513-running)
118-
1. [Create Application](#514-create-application)
119-
2. [Opting Out of Services](#515-opting-out-of-services)
118+
1. [Admin Panel](#513-admin-panel)
119+
1. [Running](#514-running)
120+
1. [Create Application](#515-create-application)
121+
2. [Opting Out of Services](#516-opting-out-of-services)
120122
1. [Running in Production](#6-running-in-production)
121123
1. [Uvicorn Workers with Gunicorn](#61-uvicorn-workers-with-gunicorn)
122124
1. [Running With NGINX](#62-running-with-nginx)
@@ -239,6 +241,37 @@ ADMIN_USERNAME="your_username"
239241
ADMIN_PASSWORD="your_password"
240242
```
241243

244+
For the CRUDAdmin panel:
245+
246+
```
247+
# ------------- crud admin -------------
248+
CRUD_ADMIN_ENABLED=true # default=true, set to false to disable admin panel
249+
CRUD_ADMIN_MOUNT_PATH="/admin" # default="/admin", path where admin panel will be mounted
250+
251+
# ------------- crud admin security -------------
252+
CRUD_ADMIN_MAX_SESSIONS=10 # default=10, maximum concurrent sessions per user
253+
CRUD_ADMIN_SESSION_TIMEOUT=1440 # default=1440 (24 hours), session timeout in minutes
254+
SESSION_SECURE_COOKIES=true # default=true, use secure cookies
255+
256+
# ------------- crud admin tracking -------------
257+
CRUD_ADMIN_TRACK_EVENTS=true # default=true, track admin events
258+
CRUD_ADMIN_TRACK_SESSIONS=true # default=true, track admin sessions in database
259+
260+
# ------------- crud admin redis (optional for production) -------------
261+
CRUD_ADMIN_REDIS_ENABLED=false # default=false, use Redis for session storage
262+
CRUD_ADMIN_REDIS_HOST="localhost" # default="localhost", Redis host for admin sessions
263+
CRUD_ADMIN_REDIS_PORT=6379 # default=6379, Redis port for admin sessions
264+
CRUD_ADMIN_REDIS_DB=0 # default=0, Redis database for admin sessions
265+
CRUD_ADMIN_REDIS_PASSWORD="" # optional, Redis password for admin sessions
266+
CRUD_ADMIN_REDIS_SSL=false # default=false, use SSL for Redis connection
267+
```
268+
269+
**Session Backend Options:**
270+
- **Memory** (default): Development-friendly, sessions reset on restart
271+
- **Redis** (production): High performance, scalable, persistent sessions
272+
- **Database**: Audit-friendly with admin visibility
273+
- **Hybrid**: Redis performance + database audit trail
274+
242275
For redis caching:
243276

244277
```
@@ -1546,7 +1579,116 @@ What you should do with the client is:
15461579

15471580
This authentication setup in the provides a robust, secure, and user-friendly way to handle user sessions in your API applications.
15481581

1549-
### 5.13 Running
1582+
### 5.13 Admin Panel
1583+
1584+
> 📖 **[See admin panel guide in our docs](https://benavlabs.github.io/FastAPI-boilerplate/user-guide/admin-panel/)**
1585+
1586+
The boilerplate includes a powerful web-based admin interface built with [CRUDAdmin](https://github.com/benavlabs/crudadmin) that provides a comprehensive database management system.
1587+
1588+
> **About CRUDAdmin**: CRUDAdmin is a modern admin interface generator for FastAPI applications. Learn more at:
1589+
> - **📚 Documentation**: [benavlabs.github.io/crudadmin](https://benavlabs.github.io/crudadmin/)
1590+
> - **💻 GitHub**: [github.com/benavlabs/crudadmin](https://github.com/benavlabs/crudadmin)
1591+
1592+
#### 5.13.1 Features
1593+
1594+
The admin panel includes:
1595+
1596+
- **User Management**: Create, view, update users with password hashing
1597+
- **Tier Management**: Manage user tiers and permissions
1598+
- **Post Management**: Full CRUD operations for posts
1599+
- **Authentication**: Secure login system with session management
1600+
- **Security**: IP restrictions, session timeouts, and secure cookies
1601+
- **Redis Integration**: Optional Redis support for session storage
1602+
- **Event Tracking**: Track admin actions and sessions
1603+
1604+
#### 5.13.2 Access
1605+
1606+
Once your application is running, you can access the admin panel at:
1607+
1608+
```
1609+
http://localhost:8000/admin
1610+
```
1611+
1612+
Use the admin credentials you defined in your `.env` file:
1613+
- Username: `ADMIN_USERNAME`
1614+
- Password: `ADMIN_PASSWORD`
1615+
1616+
#### 5.13.3 Configuration
1617+
1618+
The admin panel is highly configurable through environment variables:
1619+
1620+
- **Basic Settings**: Enable/disable, mount path
1621+
- **Security**: Session limits, timeouts, IP restrictions
1622+
- **Tracking**: Event and session tracking
1623+
- **Redis**: Optional Redis session storage
1624+
1625+
See the [environment variables section](#31-environment-variables-env) for complete configuration options.
1626+
1627+
#### 5.13.4 Customization
1628+
1629+
**Adding New Models**
1630+
1631+
To add new models to the admin panel, edit `src/app/admin/views.py`:
1632+
1633+
```python
1634+
from your_app.models import YourModel
1635+
from your_app.schemas import YourCreateSchema, YourUpdateSchema
1636+
1637+
def register_admin_views(admin: CRUDAdmin) -> None:
1638+
# ... existing models ...
1639+
1640+
admin.add_view(
1641+
model=YourModel,
1642+
create_schema=YourCreateSchema,
1643+
update_schema=YourUpdateSchema,
1644+
allowed_actions={"view", "create", "update", "delete"}
1645+
)
1646+
```
1647+
1648+
**Advanced Configuration**
1649+
1650+
For more complex model configurations:
1651+
1652+
```python
1653+
# Handle models with problematic fields (e.g., TSVector)
1654+
admin.add_view(
1655+
model=Article,
1656+
create_schema=ArticleCreate,
1657+
update_schema=ArticleUpdate,
1658+
select_schema=ArticleSelect, # Exclude problematic fields from read operations
1659+
allowed_actions={"view", "create", "update", "delete"}
1660+
)
1661+
1662+
# Password field handling
1663+
admin.add_view(
1664+
model=User,
1665+
create_schema=UserCreateWithPassword,
1666+
update_schema=UserUpdateWithPassword,
1667+
password_transformer=password_transformer, # Handles password hashing
1668+
allowed_actions={"view", "create", "update"}
1669+
)
1670+
1671+
# Read-only models
1672+
admin.add_view(
1673+
model=AuditLog,
1674+
create_schema=AuditLogSchema,
1675+
update_schema=AuditLogSchema,
1676+
allowed_actions={"view"} # Only viewing allowed
1677+
)
1678+
```
1679+
1680+
**Session Backend Configuration**
1681+
1682+
For production environments, consider using Redis for better performance:
1683+
1684+
```python
1685+
# Enable Redis sessions in your environment
1686+
CRUD_ADMIN_REDIS_ENABLED=true
1687+
CRUD_ADMIN_REDIS_HOST=localhost
1688+
CRUD_ADMIN_REDIS_PORT=6379
1689+
```
1690+
1691+
### 5.14 Running
15501692

15511693
If you are using docker compose, just running the following command should ensure everything is working:
15521694

@@ -1566,7 +1708,7 @@ And for the worker:
15661708
```sh
15671709
uv run arq src.app.core.worker.settings.WorkerSettings
15681710
```
1569-
### 5.14 Create Application
1711+
### 5.15 Create Application
15701712

15711713
If you want to stop tables from being created every time you run the api, you should disable this here:
15721714

@@ -1589,7 +1731,7 @@ A few examples:
15891731
- Add client-side cache middleware
15901732
- Add Startup and Shutdown event handlers for cache, queue and rate limit
15911733

1592-
### 5.15 Opting Out of Services
1734+
### 5.16 Opting Out of Services
15931735

15941736
To opt out of services (like `Redis`, `Queue`, `Rate Limiter`), head to the `Settings` class in `src/app/core/config`:
15951737

@@ -1617,6 +1759,7 @@ class Settings(
16171759
RedisQueueSettings,
16181760
RedisRateLimiterSettings,
16191761
DefaultRateLimitSettings,
1762+
CRUDAdminSettings,
16201763
EnvironmentSettings,
16211764
):
16221765
pass

0 commit comments

Comments
 (0)