123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 |
- package permission
- import (
- "github.com/gin-gonic/gin"
- "net/http"
- "sghgogs.com/micro/auth-client/model/base"
- "sghgogs.com/micro/auth-client/model/response/admin"
- "sghgogs.com/micro/auth-client/response"
- "sghgogs.com/micro/auth-client/utils"
- pb "sghgogs.com/micro/auth-service/proto"
- "sghgogs.com/micro/common"
- "strconv"
- )
- // binding:"required"
- type ListResponse struct {
- Items []admin.AdminPermission `json:"items"`
- TotalCount int64 `json:"total_count"`
- }
- type Request struct {
- Page int32 `json:"page"` // 页码, 默认1
- PageSize int32 `json:"page_size"` // 页大小, 默认20
- Keyword string `json:"keyword"` // 关键词
- Status base.Status `json:"status"` // 状态 ENABLED DISABLED DELETED
- }
- // GetAdminPermissionList
- // @summary 权限列表
- // @Tags Permissions
- // @Accept json
- // @Produce json
- // @Param Authorization header string true "Bearer 用户令牌"
- // @Param page query int true "页码"
- // @Param page_size query int true "每页数量"
- // @Param keyword query string false "关键字"
- // @Param status query string false "状态" Enums(enabled, disabled)
- // @Success 200 {object} response.ApiResponse{data=ListResponse} "成功"
- // @Failure 400 {object} response.ApiResponse "请求错误"
- // @Failure 500 {object} response.ApiResponse "内部错误"
- // @Router /v1/api/admin/permissions [get]
- func (svc *AdminPermission) GetAdminPermissionList(c *gin.Context) {
- validationConfig := response.ValidationConfig{
- Validators: map[string]func(interface{}) error{
- "page": response.ValidateInt, // 验证是否为整数
- "page_size": response.ValidateInt, // 验证是否为整数
- },
- Required: []string{"page", "page_size"},
- }
- params, err := response.ParseQueryParameters(c, validationConfig)
- if err != nil {
- c.JSON(http.StatusBadRequest, response.ErrorResponse(http.StatusBadRequest, err.Error()))
- return
- }
- page, _ := strconv.Atoi(params["page"].(string))
- pageSize, _ := strconv.Atoi(params["page_size"].(string))
- keyword, status := "", ""
- if value, ok := params["keyword"]; ok {
- keyword = value.(string)
- }
- if value, ok := params["status"]; ok {
- status = value.(string)
- if status != "" && !base.IsValidStatus(status) {
- c.JSON(http.StatusBadRequest, gin.H{"error": common.ErrorMessage[common.StatusIsNotValid]})
- return
- }
- }
- ctx, _ := utils.CreateContextWithToken(c, "authorizationservice", "AdminPermissionService.GetAdminPermissionList")
- listRequest := pb.GetAdminPermissionListRequest{
- Page: int32(page),
- PageSize: int32(pageSize),
- Keyword: keyword,
- }
- if status != "" {
- enum, _ := base.MapStatusToEnum(base.Status(status))
- listRequest.Status = enum
- }
- list, err := svc.Service.GetAdminPermissionList(ctx, &listRequest)
- if err != nil {
- code, mgs := response.MicroErrorRequest(err)
- c.JSON(code, response.ErrorResponse(code, mgs))
- return
- }
- permissions := make([]admin.AdminPermission, 0)
- for _, permission := range list.Items {
- var item admin.AdminPermission
- common.SwapTo(permission, &item)
- toStatus, _ := base.MapEnumToStatus(permission.Status)
- item.Status = string(toStatus)
- if permission.UpdatedAt > 0 {
- item.UpdatedAt = utils.ConvertInt64ToTime(permission.UpdatedAt)
- }
- item.CreatedAt = utils.ConvertInt64ToTime(permission.CreatedAt)
- item.IsReserved = permission.IsReserved
- item.Roles = base.RolesToResponse(permission.Roles)
- item.Endpoint = permission.Endpoint
- permissions = append(permissions, item)
- }
- c.JSON(http.StatusOK, response.SuccessResponse(ListResponse{
- Items: permissions,
- TotalCount: list.TotalCount,
- }))
- }
- // GetAdminPermission
- // @summary 获取权限详情
- // @Tags Permissions
- // @Accept json
- // @Produce json
- // @Param Authorization header string true "Bearer 用户令牌"
- // @Param id path int true "权限ID"
- // @Success 200 {object} response.ApiResponse{data=admin.AdminPermission} "成功"
- // @Failure 400 {object} response.ApiResponse "请求错误"
- // @Failure 500 {object} response.ApiResponse "内部错误"
- // @Router /v1/api/admin/permission/{permissionID} [get]
- func (svc *AdminPermission) GetAdminPermission(c *gin.Context) {
- permissionID, err := strconv.ParseInt(c.Param("permissionID"), 10, 64)
- if err != nil || permissionID <= 0 {
- c.JSON(http.StatusBadRequest, response.ErrorResponse(http.StatusBadRequest, common.ErrorMessage[common.InvalidRoleID]))
- return
- }
- ctx, _ := utils.CreateContextWithToken(c, "authorizationservice", "AdminRoleService.GetAdminRole")
- list, err := svc.Service.GetAdminPermission(ctx, &pb.GetAdminPermissionRequest{
- Id: permissionID,
- })
- if err != nil {
- code, mgs := response.MicroErrorRequest(err)
- c.JSON(http.StatusBadRequest, response.ErrorResponse(code, mgs))
- return
- }
- permission := list.Data
- status, _ := base.MapEnumToStatus(permission.Status)
- c.JSON(http.StatusOK, response.SuccessResponse(admin.AdminPermission{
- ID: permission.Id,
- Name: permission.Name,
- Description: permission.Description,
- Roles: base.RolesToResponse(permission.Roles),
- CreatedAt: utils.ConvertInt64ToTime(permission.CreatedAt),
- UpdatedAt: utils.ConvertInt64ToTime(permission.UpdatedAt),
- Status: string(status),
- IsReserved: permission.IsReserved,
- }))
- }
- type CreateRequest struct {
- Name string `json:"name" binding:"required,max=50,min=3"` // 权限名称
- Description string `json:"description"` // 非必填,描述
- Endpoint string `json:"endpoint" binding:"required"`
- Roles []int64 `json:"roles"` // 角色
- }
- // CreateAdminPermission
- // @summary 新增权限
- // @Tags Permissions
- // @Accept json
- // @Produce json
- // @Param Authorization header string true "Bearer 用户令牌"
- // @Param body body CreateRequest true "请求body"
- // @Success 200 {object} response.ApiResponse "成功"
- // @Failure 400 {object} response.ApiResponse "请求错误"
- // @Failure 500 {object} response.ApiResponse "内部错误"
- // @Router /v1/api/admin/permission [post]
- func (svc *AdminPermission) CreateAdminPermission(c *gin.Context) {
- var req CreateRequest
- if err := c.BindJSON(&req); err != nil {
- c.JSON(http.StatusBadRequest, response.ErrorResponse(http.StatusBadRequest, err.Error()))
- return
- }
- if len(req.Roles) > 0 {
- if isBool, err := common.ValidateNumericInt64(req.Roles); !isBool {
- c.JSON(http.StatusBadRequest, response.ErrorResponse(http.StatusBadRequest, err.Error()))
- return
- }
- }
- ctx, _ := utils.CreateContextWithToken(c, "authorizationservice", "AdminPermissionService.CreateAdminPermission")
- _, err := svc.Service.CreateAdminPermission(ctx, &pb.CreateAdminPermissionRequest{
- Name: req.Name,
- Description: req.Description,
- Endpoint: req.Endpoint,
- Roles: req.Roles,
- Status: pb.StatusEnum_ENABLED,
- })
- if err != nil {
- code, mgs := response.MicroErrorRequest(err)
- c.JSON(code, response.ErrorResponse(code, mgs))
- return
- }
- c.JSON(http.StatusOK, response.SuccessResponse(nil))
- }
- type UpdateRequest struct {
- Description string `json:"description"` // 非必填,描述
- Roles []int64 `json:"roles"` // 角色
- }
- // UpdateAdminPermission
- // @summary 更新权限
- // @Tags Permissions
- // @Accept json
- // @Produce json
- // @Param Authorization header string true "Bearer 用户令牌"
- // @Param id path int true "权限ID"
- // @Param body body UpdateRequest true "请求body"
- // @Success 200 {object} response.ApiResponse "成功"
- // @Failure 400 {object} response.ApiResponse "请求错误"
- // @Failure 500 {object} response.ApiResponse "内部错误"
- // @Router /v1/api/admin/permission/{permissionID} [put]
- func (svc *AdminPermission) UpdateAdminPermission(c *gin.Context) {
- var req UpdateRequest
- if err := c.BindJSON(&req); err != nil {
- c.JSON(http.StatusBadRequest, response.ErrorResponse(http.StatusBadRequest, err.Error()))
- return
- }
- permissionID, err := strconv.ParseInt(c.Param("permissionID"), 10, 64)
- if err != nil || permissionID <= 0 {
- c.JSON(http.StatusBadRequest, response.ErrorResponse(http.StatusBadRequest, common.ErrorMessage[common.InvalidRoleID]))
- return
- }
- if len(req.Roles) > 0 {
- if isBool, err := common.ValidateNumericInt64(req.Roles); !isBool {
- c.JSON(http.StatusBadRequest, response.ErrorResponse(http.StatusBadRequest, err.Error()))
- return
- }
- }
- ctx, _ := utils.CreateContextWithToken(c, "authorizationservice", "AdminRoleService.UpdateAdminRole")
- _, err = svc.Service.UpdateAdminPermission(ctx, &pb.UpdateAdminPermissionRequest{
- PermissionId: permissionID,
- Description: req.Description,
- Roles: req.Roles,
- })
- if err != nil {
- code, mgs := response.MicroErrorRequest(err)
- c.JSON(code, response.ErrorResponse(code, mgs))
- return
- }
- c.JSON(http.StatusOK, response.SuccessResponse(nil))
- }
- // DeleteAdminPermission
- // @summary 删除权限
- // @Tags Permissions
- // @Accept json
- // @Produce json
- // @Param Authorization header string true "Bearer 用户令牌"
- // @Param id path int true "权限ID"
- // @Success 200 {object} response.ApiResponse "成功"
- // @Failure 400 {object} response.ApiResponse "请求错误"
- // @Failure 500 {object} response.ApiResponse "内部错误"
- // @Router /v1/api/admin/permission/{permissionID} [delete]
- func (svc *AdminPermission) DeleteAdminPermission(c *gin.Context) {
- permissionID, err := strconv.ParseInt(c.Param("permissionID"), 10, 64)
- if err != nil || permissionID <= 0 {
- c.JSON(http.StatusBadRequest, response.ErrorResponse(http.StatusBadRequest, common.ErrorMessage[common.InvalidRoleID]))
- return
- }
- ctx, _ := utils.CreateContextWithToken(c, "authorizationservice", "AdminRoleService.DeleteAdminRole")
- _, err = svc.Service.DeleteAdminPermission(ctx, &pb.DeleteAdminPermissionRequest{
- PermissionId: permissionID,
- })
- if err != nil {
- code, mgs := response.MicroErrorRequest(err)
- c.JSON(code, response.ErrorResponse(code, mgs))
- return
- }
- c.JSON(http.StatusOK, response.SuccessResponse(nil))
- }
- type ToggleRequest struct {
- Status base.Status `json:"status" binding:"required"` // "enabled"|"disabled"
- }
- // ToggleAdminPermission
- // @summary 启用/禁用
- // @Tags Permissions
- // @Accept json
- // @Produce json
- // @Param Authorization header string true "Bearer 用户令牌"
- // @Param body body ToggleRequest true "请求body"
- // @Success 200 {object} response.ApiResponse "成功"
- // @Failure 400 {object} response.ApiResponse "请求错误"
- // @Failure 500 {object} response.ApiResponse "内部错误"
- // @Router /v1/api/admin/permission/{permissionID}/toggle [put]
- func (svc *AdminPermission) ToggleAdminPermission(c *gin.Context) {
- var req ToggleRequest
- if err := c.ShouldBindJSON(&req); err != nil {
- c.JSON(http.StatusBadRequest, response.ErrorResponse(http.StatusBadRequest, err.Error()))
- return
- }
- permissionID, err := strconv.ParseInt(c.Param("permissionID"), 10, 64)
- if err != nil || permissionID <= 0 {
- c.JSON(http.StatusBadRequest, response.ErrorResponse(http.StatusBadRequest, common.ErrorMessage[common.InvalidRoleID]))
- return
- }
- enum, err := base.MapStatusToEnum(req.Status)
- if err != nil {
- c.JSON(http.StatusBadRequest, response.ErrorResponse(http.StatusBadRequest, common.ErrorMessage[common.StatusIsNotValid]))
- return
- }
- ctx, _ := utils.CreateContextWithToken(c, "authorizationservice", "AdminPermissionService.ToggleAdminPermission")
- _, err = svc.Service.ToggleAdminPermission(ctx, &pb.ToggleAdminPermissionRequest{
- PermissionId: permissionID,
- Status: enum,
- })
- if err != nil {
- code, mgs := response.MicroErrorRequest(err)
- c.JSON(code, response.ErrorResponse(code, mgs))
- return
- }
- c.JSON(http.StatusOK, response.SuccessResponse(nil))
- }
|