A high-performance, fine-grained access control service built in Go. This service manages permissions across all resources in the PyAirtable ecosystem with support for both Role-Based Access Control (RBAC) and Attribute-Based Access Control (ABAC).
- High-Performance Permission Checks: Optimized for minimal latency with Redis caching
- Fine-Grained Access Control: Resource-level permissions (tenant → workspace → table → record)
- Role-Based Access Control (RBAC): Flexible role management with hierarchical permissions
- Attribute-Based Access Control (ABAC): Policy-based permissions with dynamic context evaluation
- Permission Inheritance: Hierarchical permission model with automatic inheritance
- Bulk Operations: Batch permission checks for improved performance
- Comprehensive Auditing: Full audit trail for compliance and security monitoring
- Redis Caching: Intelligent caching with automatic invalidation
- Batch Processing: Bulk permission operations to reduce database load
- Connection Pooling: Optimized database connections
- Benchmarked Performance: Sub-10ms average response times
- JWT Authentication: Secure API access
- Rate Limiting: Protection against abuse
- Audit Logging: Complete permission change tracking
- Cache Invalidation: Immediate consistency on permission changes
POST /api/v1/permissions/check
- Check single permissionPOST /api/v1/permissions/bulk-check
- Check multiple permissions
POST /api/v1/permissions/grant
- Grant permission to userPOST /api/v1/permissions/revoke
- Revoke permission from user
GET /api/v1/permissions/user/:userId
- Get all user permissionsGET /api/v1/permissions/user/:userId/roles
- Get user roles
GET /api/v1/permissions/resource/:resourceId
- Get resource permissions
GET /api/v1/permissions/roles
- List all rolesPOST /api/v1/permissions/roles
- Create new rolePOST /api/v1/permissions/roles/:roleId/assign
- Assign role to user
GET /ping
- Basic health checkGET /health
- Detailed health status with cache statistics
- Go 1.21+
- PostgreSQL 13+
- Redis 6+
- Clone the repository:
git clone https://github.com/pyairtable/permission-service.git
cd permission-service
- Install dependencies:
go mod download
- Set up environment variables:
export DB_HOST=localhost
export DB_PORT=5432
export DB_USER=postgres
export DB_PASSWORD=your_password
export DB_NAME=permission_service
export REDIS_HOST=localhost
export REDIS_PORT=6379
export JWT_SECRET=your_jwt_secret
- Start the service:
go run cmd/permission-service/main.go
The service will start on port 8080 by default.
curl -X POST http://localhost:8080/api/v1/permissions/check \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"user_id": "user_123",
"resource_type": "table",
"resource_id": "table_456",
"action": "read"
}'
Response:
{
"allowed": true,
"reason": "Direct permission",
"cache_hit": false,
"checked_at": "2024-01-15T10:30:00Z"
}
- Average permission check latency: ~2ms
- Bulk permission check (10 items): ~5ms
- Cache hit ratio: >90% in typical workloads
- Database connection pool: 25 connections
# Unit tests
go test ./test/unit/...
# Integration tests
go test ./test/integration/...
# Benchmarks
go test -bench=. ./test/unit/...
# Coverage
go test -cover ./...
MIT License - see LICENSE file for details.