package casbin import ( "github.com/gofiber/fiber/v2" "gofiber.study.skcks.cn/common/errorx" "gofiber.study.skcks.cn/common/response" "gofiber.study.skcks.cn/global" ) func RegisterController(app *fiber.App) { group := app.Group("/casbin") group.Add(fiber.MethodGet, "/test", testCasbin) group.Add(fiber.MethodPost, "/reload", reloadCasbin) group.Add(fiber.MethodGet, "/getUserRoles", getUserRoles) } // testCasbin casbin 鉴权测试 // // @Summary casbin 鉴权测试 // @Description casbin 鉴权测试 // @Tags CasBin // @Accept json // @Produce json // @Param identity query string true "身份" // @Param system query string true "系统" // @Param api query string true "api" // @Param act query string true "动作" // @Success 200 {object} response.Response{data=string} // @Failure default {object} errorx.CodeErrorResponse // @Router /casbin/test [get] func testCasbin(ctx *fiber.Ctx) error { var identity, system, api, act string identity = ctx.Query("identity") system = ctx.Query("system") api = ctx.Query("api") act = ctx.Query("act") enforce, err := global.Enforcer.Enforce(identity, system, api, act) if err != nil { return ctx.JSON(errorx.NewDefaultError(err.Error())) } if !enforce { return ctx.JSON(errorx.NewErrorWithCode(fiber.StatusForbidden, "无权访问")) } return ctx.JSON(response.NewResponse("授权访问")) } // reloadCasbin 重新加载 casbin 策略 // // @Summary 重新加载 casbin 策略 // @Description 重新加载 casbin 策略 // @Tags CasBin // @Accept json // @Produce json // @Success 200 {object} response.Response{data=string} // @Failure default {object} errorx.CodeErrorResponse // @Router /casbin/reload [post] func reloadCasbin(ctx *fiber.Ctx) error { err := global.Enforcer.LoadPolicy() if err != nil { return ctx.JSON(errorx.NewErrorWithCode(fiber.StatusForbidden, err.Error())) } return ctx.JSON(response.NewResponse("重载成功")) } type GetUserRolesQuery struct { Account string `json:"account" example:"root"` } // getUserRoles 用户所有角色 // // @Summary 用户所有角色 // @Description 用户所有角色 // @Tags CasBin // @Accept json // @Produce json // @Param account query string true "用户账号" default(root) // @Success 200 {object} response.Response{data=[]string} // @Failure default {object} errorx.CodeErrorResponse // @Router /casbin/getUserRoles [get] func getUserRoles(ctx *fiber.Ctx) error { query := &GetUserRolesQuery{} err := ctx.QueryParser(query) roles, err := global.Enforcer.GetRolesForUser("user::" + query.Account) if err != nil { if err != nil { return ctx.JSON(errorx.NewErrorWithCode(fiber.StatusForbidden, err.Error())) } } return ctx.JSON(response.NewResponse(roles)) }