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.

178 lines
3.7 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 (
"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)
}