feat(auth): 完成租户用户角色资源核心模块
This commit is contained in:
@@ -2,11 +2,11 @@ package router
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"smart-customer-service/config"
|
||||
"smart-customer-service/internal/handlers"
|
||||
"smart-customer-service/internal/middleware"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type Router struct {
|
||||
@@ -21,8 +21,9 @@ func New(cfg *config.Config) *Router {
|
||||
}
|
||||
}
|
||||
|
||||
// SetupRoutes 配置所有路由
|
||||
func (r *Router) SetupRoutes() *gin.Engine {
|
||||
// 设置Gin模式
|
||||
// 设置 Gin 模式
|
||||
if r.cfg.Server.Mode == "release" {
|
||||
gin.SetMode(gin.ReleaseMode)
|
||||
}
|
||||
@@ -34,63 +35,71 @@ func (r *Router) SetupRoutes() *gin.Engine {
|
||||
router.Use(middleware.Logger())
|
||||
router.Use(middleware.Recovery())
|
||||
|
||||
// API路由组
|
||||
// ============ API 路由 ============
|
||||
api := router.Group("/api")
|
||||
{
|
||||
// 公共路由(无需认证)
|
||||
// === 公共路由(无需认证) ===
|
||||
public := api.Group("/v1")
|
||||
{
|
||||
// 认证
|
||||
public.POST("/auth/login", r.handlers.Auth.Login)
|
||||
public.POST("/auth/register", r.handlers.Auth.Register)
|
||||
public.POST("/auth/refresh", r.handlers.Auth.RefreshToken)
|
||||
|
||||
// 租户相关
|
||||
|
||||
// 租户注册
|
||||
public.POST("/tenants/register", r.handlers.Tenant.Register)
|
||||
public.GET("/tenants/:id", r.handlers.Tenant.GetTenantInfo)
|
||||
}
|
||||
|
||||
// 需要认证的路由
|
||||
// === 需要认证的路由 ===
|
||||
protected := api.Group("/v1")
|
||||
protected.Use(middleware.Auth(r.cfg.JWT.Secret))
|
||||
{
|
||||
// 租户管理
|
||||
r.setupTenantRoutes(protected)
|
||||
|
||||
// 用户管理
|
||||
protected.GET("/users/profile", r.handlers.User.GetProfile)
|
||||
protected.PUT("/users/profile", r.handlers.User.UpdateProfile)
|
||||
|
||||
r.setupUserRoutes(protected)
|
||||
|
||||
// 角色管理
|
||||
r.setupRoleRoutes(protected)
|
||||
|
||||
// 资源管理
|
||||
r.setupResourceRoutes(protected)
|
||||
|
||||
// 会话管理
|
||||
protected.GET("/conversations", r.handlers.Conversation.List)
|
||||
protected.POST("/conversations", r.handlers.Conversation.Create)
|
||||
protected.GET("/conversations/:id", r.handlers.Conversation.Get)
|
||||
protected.GET("/conversations/:id/messages", r.handlers.Conversation.GetMessages)
|
||||
|
||||
// 消息管理
|
||||
protected.POST("/messages", r.handlers.Message.Send)
|
||||
|
||||
r.setupConversationRoutes(protected)
|
||||
|
||||
// 工单管理
|
||||
protected.GET("/tickets", r.handlers.Ticket.List)
|
||||
protected.POST("/tickets", r.handlers.Ticket.Create)
|
||||
protected.GET("/tickets/:id", r.handlers.Ticket.Get)
|
||||
protected.PUT("/tickets/:id", r.handlers.Ticket.Update)
|
||||
|
||||
r.setupTicketRoutes(protected)
|
||||
|
||||
// 知识库管理
|
||||
protected.GET("/knowledge", r.handlers.Knowledge.List)
|
||||
protected.POST("/knowledge", r.handlers.Knowledge.Create)
|
||||
protected.PUT("/knowledge/:id", r.handlers.Knowledge.Update)
|
||||
protected.DELETE("/knowledge/:id", r.handlers.Knowledge.Delete)
|
||||
r.setupKnowledgeRoutes(protected)
|
||||
}
|
||||
|
||||
// 管理员路由
|
||||
// === 管理员路由 ===
|
||||
admin := api.Group("/admin")
|
||||
admin.Use(middleware.Auth(r.cfg.JWT.Secret))
|
||||
admin.Use(middleware.AdminOnly())
|
||||
{
|
||||
// 全局租户管理
|
||||
admin.GET("/tenants", r.handlers.Tenant.ListAll)
|
||||
admin.PUT("/tenants/:id/status", r.handlers.Tenant.UpdateStatus)
|
||||
|
||||
// 全局用户管理
|
||||
admin.GET("/users", r.handlers.User.ListAll)
|
||||
|
||||
// 统计数据
|
||||
admin.GET("/stats", r.handlers.Admin.GetStats)
|
||||
admin.GET("/stats/tenants", r.handlers.Admin.GetTenantStats)
|
||||
admin.GET("/stats/users", r.handlers.Admin.GetUserStats)
|
||||
|
||||
// 系统配置
|
||||
admin.GET("/config", r.handlers.Admin.GetConfig)
|
||||
admin.PUT("/config", r.handlers.Admin.UpdateConfig)
|
||||
}
|
||||
}
|
||||
|
||||
// 健康检查
|
||||
// === 健康检查 ===
|
||||
router.GET("/health", func(c *gin.Context) {
|
||||
c.JSON(200, gin.H{
|
||||
"status": "ok",
|
||||
@@ -98,5 +107,98 @@ func (r *Router) SetupRoutes() *gin.Engine {
|
||||
})
|
||||
})
|
||||
|
||||
// === 版本信息 ===
|
||||
router.GET("/version", func(c *gin.Context) {
|
||||
c.JSON(200, gin.H{
|
||||
"version": "1.0.0",
|
||||
"build": "development",
|
||||
})
|
||||
})
|
||||
|
||||
return router
|
||||
}
|
||||
|
||||
// setupTenantRoutes 配置租户路由
|
||||
func (r *Router) setupTenantRoutes(g *gin.RouterGroup) {
|
||||
tenants := g.Group("/tenants")
|
||||
{
|
||||
tenants.GET("", r.handlers.Tenant.List) // 列表
|
||||
tenants.GET("/:id", r.handlers.Tenant.Get) // 详情
|
||||
tenants.PUT("/:id", r.handlers.Tenant.Update) // 更新
|
||||
tenants.DELETE("/:id", r.handlers.Tenant.Delete) // 删除
|
||||
tenants.POST("/:id/activate", r.handlers.Tenant.Activate) // 激活
|
||||
tenants.POST("/:id/suspend", r.handlers.Tenant.Suspend) // 暂停
|
||||
tenants.GET("/:id/stats", r.handlers.Tenant.GetStats) // 统计
|
||||
}
|
||||
}
|
||||
|
||||
// setupUserRoutes 配置用户路由
|
||||
func (r *Router) setupUserRoutes(g *gin.RouterGroup) {
|
||||
users := g.Group("/users")
|
||||
{
|
||||
users.GET("", r.handlers.User.List) // 列表
|
||||
users.POST("", r.handlers.User.Create) // 创建
|
||||
users.GET("/:id", r.handlers.User.Get) // 详情
|
||||
users.PUT("/:id", r.handlers.User.Update) // 更新
|
||||
users.DELETE("/:id", r.handlers.User.Delete) // 删除
|
||||
users.PUT("/:id/change-password", r.handlers.User.ChangePassword) // 修改密码
|
||||
users.POST("/:id/assign-roles", r.handlers.User.AssignRoles) // 分配角色
|
||||
|
||||
// 个人资料
|
||||
users.GET("/profile", r.handlers.User.GetProfile)
|
||||
users.PUT("/profile", r.handlers.User.UpdateProfile)
|
||||
}
|
||||
}
|
||||
|
||||
// setupRoleRoutes 配置角色路由
|
||||
func (r *Router) setupRoleRoutes(g *gin.RouterGroup) {
|
||||
roles := g.Group("/roles")
|
||||
{
|
||||
roles.GET("", r.handlers.Role.List) // 列表
|
||||
roles.POST("", r.handlers.Role.Create) // 创建
|
||||
roles.GET("/:id", r.handlers.Role.Get) // 详情
|
||||
roles.PUT("/:id", r.handlers.Role.Update) // 更新
|
||||
roles.DELETE("/:id", r.handlers.Role.Delete) // 删除
|
||||
roles.POST("/:id/assign-resources", r.handlers.Role.AssignResources) // 分配资源
|
||||
roles.GET("/:id/permissions", r.handlers.Role.GetPermissions) // 获取权限
|
||||
}
|
||||
}
|
||||
|
||||
// setupResourceRoutes 配置资源路由
|
||||
func (r *Router) setupResourceRoutes(g *gin.RouterGroup) {
|
||||
resources := g.Group("/resources")
|
||||
{
|
||||
resources.GET("", r.handlers.Resource.List) // 列表
|
||||
resources.POST("", r.handlers.Resource.Create) // 创建
|
||||
resources.GET("/:id", r.handlers.Resource.Get) // 详情
|
||||
resources.PUT("/:id", r.handlers.Resource.Update) // 更新
|
||||
resources.DELETE("/:id", r.handlers.Resource.Delete) // 删除
|
||||
resources.GET("/tree", r.handlers.Resource.GetTree) // 资源树
|
||||
resources.GET("/code/:code", r.handlers.Resource.GetResourceByCode) // 通过代码查询
|
||||
resources.POST("/check-permission", r.handlers.Resource.CheckPermission) // 权限检查
|
||||
}
|
||||
}
|
||||
|
||||
// setupConversationRoutes 配置会话路由
|
||||
func (r *Router) setupConversationRoutes(g *gin.RouterGroup) {
|
||||
g.GET("/conversations", r.handlers.Conversation.List)
|
||||
g.POST("/conversations", r.handlers.Conversation.Create)
|
||||
g.GET("/conversations/:id", r.handlers.Conversation.Get)
|
||||
g.GET("/conversations/:id/messages", r.handlers.Conversation.GetMessages)
|
||||
}
|
||||
|
||||
// setupTicketRoutes 配置工单路由
|
||||
func (r *Router) setupTicketRoutes(g *gin.RouterGroup) {
|
||||
g.GET("/tickets", r.handlers.Ticket.List)
|
||||
g.POST("/tickets", r.handlers.Ticket.Create)
|
||||
g.GET("/tickets/:id", r.handlers.Ticket.Get)
|
||||
g.PUT("/tickets/:id", r.handlers.Ticket.Update)
|
||||
}
|
||||
|
||||
// setupKnowledgeRoutes 配置知识库路由
|
||||
func (r *Router) setupKnowledgeRoutes(g *gin.RouterGroup) {
|
||||
g.GET("/knowledge", r.handlers.Knowledge.List)
|
||||
g.POST("/knowledge", r.handlers.Knowledge.Create)
|
||||
g.PUT("/knowledge/:id", r.handlers.Knowledge.Update)
|
||||
g.DELETE("/knowledge/:id", r.handlers.Knowledge.Delete)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user