2.7 KiB
2.7 KiB
Story 2.3: Role-Based Access Control (RBAC) System
Metadata
- Story ID: 2.3
- Title: Role-Based Access Control (RBAC) System
- Epic: 2 - Authentication & Authorization
- Status: Pending
- Priority: High
- Estimated Time: 6-8 hours
- Dependencies: 1.2, 2.1
Goal
Implement a complete RBAC system with permissions, role management, and authorization middleware.
Description
This story implements the complete RBAC system including permission definitions, permission resolution, authorization checking, and middleware for protecting routes.
Deliverables
1. Permission System (pkg/perm/perm.go)
Permissiontype (string format: "module.resource.action")- Core permission constants (system, user, role permissions)
- Permission validation utilities
2. Permission Resolver (pkg/perm/resolver.go & internal/perm/in_memory_resolver.go)
PermissionResolverinterface- Implementation that loads user roles and permissions from database
- Permission checking with caching
- Permission inheritance via roles
3. Authorization System (pkg/auth/authz.go & internal/auth/rbac_authorizer.go)
Authorizerinterface- RBAC authorizer implementation
- Extract user from context
- Check permissions
- Return authorization errors
4. Authorization Middleware
RequirePermission(perm Permission) gin.HandlerFuncdecorator- Integration with route registration
- Proper error responses for unauthorized access
5. gRPC Server (Microservices)
- Expose gRPC server for authorization service
- gRPC service definition in
api/proto/authz.proto - gRPC server implementation in
internal/auth/grpc/authz_server.go - Service registration in service registry
- Uses
IdentityServiceClientfor user operations
Acceptance Criteria
- Permissions are defined and can be checked
- Users inherit permissions through roles
- Authorization middleware protects routes
- Unauthorized requests return 403 errors
- Permission checks are cached for performance
- Permission system is extensible by modules
Related ADRs
- ADR-0019: Permission DSL Format
- ADR-0029: Microservices Architecture
- ADR-0030: Service Communication Strategy
Files to Create/Modify
pkg/perm/perm.go- Permission typespkg/perm/resolver.go- Permission resolver interfaceinternal/perm/in_memory_resolver.go- Permission resolver implementationpkg/auth/authz.go- Authorization interfaceinternal/auth/rbac_authorizer.go- RBAC authorizerinternal/auth/middleware.go- Add authorization middleware