You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

288 lines
5.6 KiB
Go

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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)
}