package scripts import ( "fmt" "mygo/dbhelper" "mygo/libs" "mygo/model" "mygo/response" "mygo/say" "mygo/validator" "github.com/labstack/echo/v4" "gorm.io/gorm" ) //获取角色授权信息 func GetRoutesByRoleId(c echo.Context) error { fmt.Println("获取角色授权信息 ") id := c.QueryParam("id") role_id := c.QueryParam("role_id") data := response.RoleRoutesResponse{} if id == "" || role_id == "" { return say.Success(c, 10001, data) } db := dbhelper.GetMySqlDB() //获取角色对应路由列表 ids, _ := model.GetRouteIdsByRoleId(db, role_id) routes, err := model.GetRoleRoutes(db, ids) if err != nil { return say.Success(c, 10000, data) } data.Routes = routes return say.Success(c, 0, data) } //角色授权 func RoleBindRoute(c echo.Context) error { id := c.QueryParam("id") data := response.NoneResponse{} body := &validator.RoleBindRouteBody{} err := c.Bind(body) if err != nil { return say.Success(c, 10000, data) } if id == "" || len(body.Routes) <= 0 || body.RoleID == "" { return say.Success(c, 10001, data) } db := dbhelper.GetMySqlDB() role_id := body.RoleID role, err := model.GetRoleById(db, role_id) if err != nil || role.ID == "" { return say.Success(c, 10006, data) } //启动事务 txerr := db.Transaction(func(tx *gorm.DB) error { // 在事务中执行一些 db 操作(从这里开始,您应该使用 'tx' 而不是 'db') //批量删除存在的授权 rr := model.RoleRoute{} if err := tx.Debug().Where("role_id = ? and deleted_at is NULL", role_id).Delete(&rr).Error; err != nil { // 返回任何错误都会回滚事务 return err } for _, route_id := range body.Routes { r, err := model.GetRoleRoute(tx, role_id, route_id) if err != nil { return err } if r.ID != "" { continue } id := libs.GenId() route := model.RoleRoute{ ID: id, RouteID: route_id, RoleID: role_id, } if err := tx.Create(&route).Error; err != nil { // 返回任何错误都会回滚事务 return err } } // 返回 nil 提交事务 return nil }) if txerr != nil { return say.Success(c, 10000, data) } return say.Success(c, 0, data) }