package controller import ( "net/http" "strconv" "gofaster/internal/auth/service" "gofaster/internal/shared/response" "github.com/gin-gonic/gin" ) type PermissionController struct { permissionService *service.PermissionService } func NewPermissionController(permissionService *service.PermissionService) *PermissionController { return &PermissionController{ permissionService: permissionService, } } // GetPermission 获取权限详情 // @Summary 获取权限详情 // @Description 根据ID获取权限详情 // @Tags 权限管理 // @Accept json // @Produce json // @Param id path int true "权限ID" // @Success 200 {object} response.Response{data=model.Permission} // @Failure 400 {object} response.Response // @Failure 404 {object} response.Response // @Router /api/auth/permissions/{id} [get] func (c *PermissionController) GetPermission(ctx *gin.Context) { idStr := ctx.Param("id") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.Error(ctx, http.StatusBadRequest, "无效的权限ID", err.Error()) return } permission, err := c.permissionService.GetPermissionByID(ctx.Request.Context(), uint(id)) if err != nil { response.Error(ctx, http.StatusNotFound, "权限不存在", err.Error()) return } response.Success(ctx, "获取权限成功", permission) } // ListPermissions 获取权限列表 // @Summary 获取权限列表 // @Description 分页获取权限列表 // @Tags 权限管理 // @Accept json // @Produce json // @Param page query int false "页码" default(1) // @Param pageSize query int false "每页数量" default(10) // @Success 200 {object} response.Response{data=map[string]interface{}} // @Failure 400 {object} response.Response // @Router /api/auth/permissions [get] func (c *PermissionController) ListPermissions(ctx *gin.Context) { page, _ := strconv.Atoi(ctx.DefaultQuery("page", "1")) pageSize, _ := strconv.Atoi(ctx.DefaultQuery("pageSize", "10")) if page < 1 { page = 1 } if pageSize < 1 || pageSize > 100 { pageSize = 10 } offset := (page - 1) * pageSize permissions, total, err := c.permissionService.ListPermissions(ctx.Request.Context(), offset, pageSize) if err != nil { response.Error(ctx, http.StatusInternalServerError, "获取权限列表失败", err.Error()) return } result := map[string]interface{}{ "list": permissions, "total": total, "page": page, "pageSize": pageSize, } response.Success(ctx, "获取权限列表成功", result) } // GetPermissionsByBackendRoute 根据后端路由获取权限 // @Summary 根据后端路由获取权限 // @Description 根据后端路由获取相关权限 // @Tags 权限管理 // @Accept json // @Produce json // @Param backendRoute query string true "后端路由" // @Success 200 {object} response.Response{data=[]model.Permission} // @Failure 400 {object} response.Response // @Router /api/auth/permissions/backend-route [get] func (c *PermissionController) GetPermissionsByBackendRoute(ctx *gin.Context) { backendRoute := ctx.Query("backendRoute") if backendRoute == "" { response.Error(ctx, http.StatusBadRequest, "后端路由不能为空", "") return } permissions, err := c.permissionService.GetPermissionsByBackendRoute(ctx.Request.Context(), backendRoute) if err != nil { response.Error(ctx, http.StatusInternalServerError, "获取权限失败", err.Error()) return } response.Success(ctx, "获取权限成功", permissions) } // GetPermissionsByMenuID 根据菜单ID获取权限 // @Summary 根据菜单ID获取权限 // @Description 根据菜单ID获取相关权限 // @Tags 权限管理 // @Accept json // @Produce json // @Param menuId path int true "菜单ID" // @Success 200 {object} response.Response{data=[]model.Permission} // @Failure 400 {object} response.Response // @Router /api/auth/permissions/menu/{menuId} [get] func (c *PermissionController) GetPermissionsByMenuID(ctx *gin.Context) { idStr := ctx.Param("menuId") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.Error(ctx, http.StatusBadRequest, "无效的菜单ID", err.Error()) return } permissions, err := c.permissionService.GetPermissionsByMenuID(ctx.Request.Context(), uint(id)) if err != nil { response.Error(ctx, http.StatusInternalServerError, "获取权限失败", err.Error()) return } response.Success(ctx, "获取权限成功", permissions) } // GetPermissionsByMenuGroupID 根据菜单分组ID获取权限 // @Summary 根据菜单分组ID获取权限 // @Description 根据菜单分组ID获取相关权限 // @Tags 权限管理 // @Accept json // @Produce json // @Param menuGroupId path int true "菜单分组ID" // @Success 200 {object} response.Response{data=[]model.Permission} // @Failure 400 {object} response.Response // @Router /api/auth/permissions/menu-group/{menuGroupId} [get] func (c *PermissionController) GetPermissionsByMenuGroupID(ctx *gin.Context) { idStr := ctx.Param("menuGroupId") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.Error(ctx, http.StatusBadRequest, "无效的菜单分组ID", err.Error()) return } permissions, err := c.permissionService.GetPermissionsByMenuGroupID(ctx.Request.Context(), uint(id)) if err != nil { response.Error(ctx, http.StatusInternalServerError, "获取权限失败", err.Error()) return } response.Success(ctx, "获取权限成功", permissions) } // GetPermissionsByAuthResourceID 根据认证资源ID获取权限 // @Summary 根据认证资源ID获取权限 // @Description 根据认证资源ID获取相关权限 // @Tags 权限管理 // @Accept json // @Produce json // @Param authResourceId path int true "认证资源ID" // @Success 200 {object} response.Response{data=[]model.Permission} // @Failure 400 {object} response.Response // @Router /api/auth/permissions/auth-resource/{authResourceId} [get] func (c *PermissionController) GetPermissionsByAuthResourceID(ctx *gin.Context) { idStr := ctx.Param("authResourceId") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.Error(ctx, http.StatusBadRequest, "无效的认证资源ID", err.Error()) return } permissions, err := c.permissionService.GetPermissionsByAuthResourceID(ctx.Request.Context(), uint(id)) if err != nil { response.Error(ctx, http.StatusInternalServerError, "获取权限失败", err.Error()) return } response.Success(ctx, "获取权限成功", permissions) } // GetUserPermissions 获取用户权限 // @Summary 获取用户权限 // @Description 根据用户ID获取用户的所有权限 // @Tags 权限管理 // @Accept json // @Produce json // @Param userId path int true "用户ID" // @Success 200 {object} response.Response{data=[]model.Permission} // @Failure 400 {object} response.Response // @Router /api/auth/permissions/user/{userId} [get] func (c *PermissionController) GetUserPermissions(ctx *gin.Context) { idStr := ctx.Param("userId") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.Error(ctx, http.StatusBadRequest, "无效的用户ID", err.Error()) return } permissions, err := c.permissionService.GetUserPermissions(ctx.Request.Context(), uint(id)) if err != nil { response.Error(ctx, http.StatusInternalServerError, "获取用户权限失败", err.Error()) return } response.Success(ctx, "获取用户权限成功", permissions) }