- 4 表设计: permissions, roles, role_permissions(m2m), user_roles - 多租户隔离: 角色和用户角色分配按 tenant_id 隔离 - 权限并集: 多角色用户取权限并集,无继承 - 系统角色保护: is_system 角色不可修改/删除 - 种子数据: 7 个默认权限 + 3 个系统角色(super_admin/tenant_admin/member) - 权限中间件: RequirePermission 支持按路由粒度控制 - API 路由: /api/v1/rbac/ 下完整 CRUD 端点 - fx 注册: RBAC Module 集成到 app.go
29 lines
1.2 KiB
Go
29 lines
1.2 KiB
Go
package domain
|
|
|
|
import "context"
|
|
|
|
type PermissionRepository interface {
|
|
Create(ctx context.Context, perm *Permission) error
|
|
FindByID(ctx context.Context, id uint) (*Permission, error)
|
|
FindByCode(ctx context.Context, code string) (*Permission, error)
|
|
FindAll(ctx context.Context) ([]Permission, error)
|
|
FindByModule(ctx context.Context, module string) ([]Permission, error)
|
|
}
|
|
|
|
type RoleRepository interface {
|
|
Create(ctx context.Context, role *Role) error
|
|
FindByID(ctx context.Context, tenantID string, id uint) (*Role, error)
|
|
FindByIDWithPermissions(ctx context.Context, tenantID string, id uint) (*Role, error)
|
|
FindByTenant(ctx context.Context, tenantID string) ([]Role, error)
|
|
Update(ctx context.Context, role *Role) error
|
|
Delete(ctx context.Context, tenantID string, id uint) error
|
|
SetPermissions(ctx context.Context, roleID uint, permIDs []uint) error
|
|
}
|
|
|
|
type UserRoleRepository interface {
|
|
Assign(ctx context.Context, ur *UserRole) error
|
|
Remove(ctx context.Context, userID uint, tenantID string, roleID uint) error
|
|
FindByUser(ctx context.Context, userID uint, tenantID string) ([]UserRole, error)
|
|
FindRolesByUser(ctx context.Context, userID uint, tenantID string) ([]Role, error)
|
|
}
|