|
|
package scripts
|
|
|
|
|
|
import (
|
|
|
"mygo/dbhelper"
|
|
|
"mygo/libs"
|
|
|
"mygo/model"
|
|
|
"mygo/response"
|
|
|
"mygo/say"
|
|
|
"mygo/validator"
|
|
|
"strconv"
|
|
|
|
|
|
"github.com/labstack/echo/v4"
|
|
|
"gorm.io/gorm"
|
|
|
)
|
|
|
|
|
|
func CheckRoleCode(c echo.Context) error {
|
|
|
id := c.QueryParam("id")
|
|
|
role_code := c.QueryParam("role_code")
|
|
|
data := response.NoneResponse{}
|
|
|
if id == "" || role_code == "" {
|
|
|
return say.Success(c, 10001, data)
|
|
|
}
|
|
|
db := dbhelper.GetMySqlDB()
|
|
|
|
|
|
r, err := model.GetRoleByCode(db, role_code)
|
|
|
if err != nil {
|
|
|
return say.Success(c, 10000, data)
|
|
|
}
|
|
|
|
|
|
if r.ID != "" {
|
|
|
return say.Success(c, 10007, data)
|
|
|
}
|
|
|
|
|
|
return say.Success(c, 0, data)
|
|
|
}
|
|
|
|
|
|
func GetRoles(c echo.Context) error {
|
|
|
id := c.QueryParam("id")
|
|
|
|
|
|
data := response.RolesResponse{}
|
|
|
if 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()
|
|
|
|
|
|
role := model.Role{}
|
|
|
var count int64 = 0
|
|
|
db.Find(&role).Count(&count) //总数
|
|
|
|
|
|
data.Count = count
|
|
|
|
|
|
offset := (page - 1) * limit
|
|
|
roles, err := model.GetRoles(db, offset, limit)
|
|
|
if err != nil {
|
|
|
return say.Success(c, 10000, data)
|
|
|
}
|
|
|
data.Roles = roles
|
|
|
return say.Success(c, 0, data)
|
|
|
}
|
|
|
|
|
|
func CreateRole(c echo.Context) error {
|
|
|
data := response.NoneResponse{}
|
|
|
body := &validator.CreateRoleBody{}
|
|
|
err := c.Bind(body)
|
|
|
if err != nil {
|
|
|
return say.Success(c, 10000, data)
|
|
|
}
|
|
|
id := c.QueryParam("id")
|
|
|
if id == "" || body.RoleName == "" || body.RoleCode == "" {
|
|
|
return say.Success(c, 10001, data)
|
|
|
}
|
|
|
db := dbhelper.GetMySqlDB()
|
|
|
|
|
|
r, err := model.GetRoleByCode(db, body.RoleCode)
|
|
|
if err != nil {
|
|
|
return say.Success(c, 10000, data)
|
|
|
}
|
|
|
|
|
|
if r.ID != "" {
|
|
|
return say.Success(c, 10007, data)
|
|
|
}
|
|
|
|
|
|
role := model.Role{
|
|
|
ID: libs.GenId(),
|
|
|
RoleName: body.RoleName,
|
|
|
RoleCode: body.RoleCode,
|
|
|
Description: body.Description,
|
|
|
}
|
|
|
db.Create(&role)
|
|
|
return say.Success(c, 0, data)
|
|
|
}
|
|
|
|
|
|
func DelRole(c echo.Context) error {
|
|
|
id := c.QueryParam("id")
|
|
|
role_id := c.QueryParam("role_id")
|
|
|
data := response.NoneResponse{}
|
|
|
if id == "" || role_id == "" {
|
|
|
return say.Success(c, 10001, data)
|
|
|
}
|
|
|
db := dbhelper.GetMySqlDB()
|
|
|
|
|
|
r, err := model.GetRoleById(db, role_id)
|
|
|
if err != nil {
|
|
|
return say.Success(c, 10000, data)
|
|
|
}
|
|
|
|
|
|
if r.ID == "" {
|
|
|
return say.Success(c, 10006, data)
|
|
|
}
|
|
|
|
|
|
//启动事务
|
|
|
txerr := db.Transaction(func(tx *gorm.DB) error {
|
|
|
|
|
|
// 在事务中执行一些 db 操作(从这里开始,您应该使用 'tx' 而不是 'db')
|
|
|
|
|
|
role := model.Role{}
|
|
|
if err := tx.Where("id = ?", role_id).Delete(&role).Error; err != nil {
|
|
|
// 返回任何错误都会回滚事务
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
//TODO删除和role角色绑定的权限
|
|
|
r := model.RoleRoute{}
|
|
|
if err := tx.Where("role_id = ?", role_id).Delete(&r).Error; err != nil {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
//删除用户角色关系表
|
|
|
u := model.UserRole{}
|
|
|
if err := tx.Where("role_id = ?", role_id).Delete(&u).Error; err != nil {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
// 返回 nil 提交事务
|
|
|
return nil
|
|
|
})
|
|
|
if txerr != nil {
|
|
|
return say.Success(c, 10000, data)
|
|
|
}
|
|
|
return say.Success(c, 0, data)
|
|
|
}
|
|
|
|
|
|
func UpdateRole(c echo.Context) error {
|
|
|
data := response.NoneResponse{}
|
|
|
body := &validator.UpdateRoleBody{}
|
|
|
err := c.Bind(body)
|
|
|
if err != nil {
|
|
|
return say.Success(c, 10000, data)
|
|
|
}
|
|
|
id := c.QueryParam("id")
|
|
|
if id == "" || body.RoleID == "" {
|
|
|
return say.Success(c, 10001, data)
|
|
|
}
|
|
|
|
|
|
role_id := body.RoleID
|
|
|
db := dbhelper.GetMySqlDB()
|
|
|
role, err := model.GetRoleById(db, role_id)
|
|
|
if err != nil || role.ID == "" {
|
|
|
return say.Success(c, 10006, data)
|
|
|
}
|
|
|
|
|
|
rows := db.Model(&role).Updates(map[string]interface{}{"role_name": body.RoleName, "description": body.Description}).RowsAffected
|
|
|
if rows <= 0 {
|
|
|
return say.Success(c, 10008, data)
|
|
|
}
|
|
|
|
|
|
return say.Success(c, 0, data)
|
|
|
}
|