package scripts import ( "fmt" "mygo/dbhelper" "mygo/libs" "mygo/model" "mygo/response" "mygo/say" "mygo/validator" "strconv" "github.com/labstack/echo/v4" "gorm.io/gorm" ) //获取角色下的用户列表 func GetUsersByRoleId(c echo.Context) error { id := c.QueryParam("id") role_id := c.QueryParam("role_id") data := response.AdminListResponse{} if id == "" || role_id == "" { return say.Success(c, 10001, data) } page, _ := strconv.Atoi(c.QueryParam("page")) if page <= 0 { page = 1 } limit, _ := strconv.Atoi(c.QueryParam("limit")) if limit <= 0 { limit = 10 } db := dbhelper.GetMySqlDB() var count int64 = 0 db.Where("role_id = ?", role_id).Find(&model.UserRole{}).Count(&count) offset := (page - 1) * limit users, _ := model.GetUsersByRoleId(db, role_id, offset, limit) data.Users = users data.Count = count return say.Success(c, 0, data) } func GetRoleByUserId(c echo.Context) error { id := c.QueryParam("id") user_id := c.QueryParam("user_id") data := response.GetRoleResponse{} if id == "" { return say.Success(c, 10001, data) } if user_id == "" { user_id = id } db := dbhelper.GetMySqlDB() r, err := model.GetRoleByUserId(db, user_id) if err != nil { return say.Success(c, 10000, data) } if r.RoleID == "" { return say.Success(c, 10006, data) } role, err := model.GetRoleById(db, r.RoleID) if err != nil { return say.Success(c, 10000, data) } if role.ID == "" { return say.Success(c, 10006, data) } data.Role = role return say.Success(c, 0, data) } //角色批量绑定用户 func RoleBindUser(c echo.Context) error { data := response.NoneResponse{} body := &validator.RoleBindUserBody{} err := c.Bind(body) if err != nil { return say.Success(c, 10000, data) } id := c.QueryParam("id") if id == "" || len(body.Users) <= 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') for _, user_id := range body.Users { r, err := model.GetUserRole(tx, user_id, role_id) if err != nil { return err } if r.ID != "" { continue } route := model.UserRole{ ID: libs.GenId(), UserID: user_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) } //用户绑定角色 func UserBindRole(c echo.Context) error { data := response.NoneResponse{} body := &validator.UserBindRoleBody{} err := c.Bind(body) if err != nil { return say.Success(c, 10000, data) } id := c.QueryParam("id") if id == "" || body.UserID == "" || body.RoleID == "" { return say.Success(c, 10001, data) } db := dbhelper.GetMySqlDB() user_id := body.UserID user, err := model.GetUserById(db, user_id) if err != nil || user.ID == "" { return say.Success(c, 10004, data) } role_id := body.RoleID role, err := model.GetRoleById(db, role_id) if err != nil || role.ID == "" { return say.Success(c, 10006, data) } r, err := model.GetRoleByUserId(db, user_id) if err != nil || r.ID != "" { a := model.UserRole{ UserID: user_id, RoleID: r.RoleID, } if err := db.Delete(&model.UserRole{}, &a).Error; err != nil { return say.Success(c, 10000, data) } } a := model.UserRole{ ID: libs.GenId(), UserID: user_id, RoleID: role_id, } if err := db.Create(&a).Error; err != nil { fmt.Println("插入失败 err=", err) return say.Success(c, 10011, data) } return say.Success(c, 0, data) } //用户绑定角色通过code func UserBindByRoleCode(c echo.Context) error { data := response.NoneResponse{} body := &validator.UserBindByRoleCodeBody{} err := c.Bind(body) if err != nil { return say.Success(c, 10000, data) } id := c.QueryParam("id") if id == "" || body.UserID == "" || body.RoleCode == "" { return say.Success(c, 10001, data) } db := dbhelper.GetMySqlDB() user_id := body.UserID user, err := model.GetUserById(db, user_id) if err != nil || user.ID == "" { return say.Success(c, 10004, data) } role_code := body.RoleCode role, err := model.GetRoleByCode(db, role_code) if err != nil || role.ID == "" { return say.Success(c, 10006, data) } r, err := model.GetRoleByUserId(db, user_id) if err != nil || r.ID != "" { a := model.UserRole{ UserID: user_id, RoleID: r.RoleID, } if err := db.Delete(&model.UserRole{}, &a).Error; err != nil { return say.Success(c, 10000, data) } } a := model.UserRole{ ID: libs.GenId(), UserID: user_id, RoleID: role.ID, } if err := db.Create(&a).Error; err != nil { fmt.Println("插入失败 err=", err) return say.Success(c, 10011, data) } return say.Success(c, 0, data) } //解除用户和角色的绑定 func DelRoleBind(c echo.Context) error { data := response.NoneResponse{} body := &validator.UserBindRoleBody{} err := c.Bind(body) if err != nil { return say.Success(c, 10000, data) } id := c.QueryParam("id") if id == "" || body.UserID == "" || body.RoleID == "" { return say.Success(c, 10001, data) } db := dbhelper.GetMySqlDB() user_id := body.UserID role_id := body.RoleID a := model.UserRole{ UserID: user_id, RoleID: role_id, } if err := db.Delete(&model.UserRole{}, &a).Error; err != nil { return say.Success(c, 10023, data) } return say.Success(c, 0, data) }