328 lines
7.0 KiB
Go
328 lines
7.0 KiB
Go
package controllers
|
|
|
|
import (
|
|
"encoding/json"
|
|
"server/models"
|
|
|
|
"github.com/beego/beego/v2/server/web"
|
|
)
|
|
|
|
type RoleController struct {
|
|
web.Controller
|
|
}
|
|
|
|
// GetAllRoles 获取所有角色
|
|
// @router /api/roles [get]
|
|
func (c *RoleController) GetAllRoles() {
|
|
roles, err := models.GetAllRoles()
|
|
if err != nil {
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 1,
|
|
"message": "获取角色列表失败: " + err.Error(),
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
|
|
roleList := make([]map[string]interface{}, 0)
|
|
for _, role := range roles {
|
|
roleList = append(roleList, map[string]interface{}{
|
|
"roleId": role.RoleId,
|
|
"roleCode": role.RoleCode,
|
|
"roleName": role.RoleName,
|
|
"description": role.Description,
|
|
"status": role.Status,
|
|
"sortOrder": role.SortOrder,
|
|
"createTime": role.CreateTime,
|
|
"updateTime": role.UpdateTime,
|
|
"createBy": role.CreateBy,
|
|
"updateBy": role.UpdateBy,
|
|
})
|
|
}
|
|
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 0,
|
|
"message": "获取角色列表成功",
|
|
"data": roleList,
|
|
}
|
|
c.ServeJSON()
|
|
}
|
|
|
|
// GetRoleById 根据ID获取角色详情
|
|
// @router /api/roles/:id [get]
|
|
func (c *RoleController) GetRoleById() {
|
|
roleId, err := c.GetInt(":id")
|
|
if err != nil || roleId <= 0 {
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 1,
|
|
"message": "角色ID无效",
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
|
|
role, err := models.GetRoleById(roleId)
|
|
if err != nil {
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 1,
|
|
"message": "获取角色详情失败: " + err.Error(),
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 0,
|
|
"message": "获取角色详情成功",
|
|
"data": map[string]interface{}{
|
|
"roleId": role.RoleId,
|
|
"roleCode": role.RoleCode,
|
|
"roleName": role.RoleName,
|
|
"description": role.Description,
|
|
"status": role.Status,
|
|
"sortOrder": role.SortOrder,
|
|
"createTime": role.CreateTime,
|
|
"updateTime": role.UpdateTime,
|
|
"createBy": role.CreateBy,
|
|
"updateBy": role.UpdateBy,
|
|
},
|
|
}
|
|
c.ServeJSON()
|
|
}
|
|
|
|
// 根据租户ID获取角色列表
|
|
// @router /api/roles/tenant/:tenantId [get]
|
|
func (c *RoleController) GetRoleByTenantId() {
|
|
tenantId, err := c.GetInt(":tenantId")
|
|
if err != nil || tenantId <= 0 {
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 1,
|
|
"message": "租户ID无效",
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
roles, err := models.GetRoleByTenantId(tenantId)
|
|
if err != nil {
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 1,
|
|
"message": "获取角色列表失败: " + err.Error(),
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 0,
|
|
"message": "获取角色列表成功",
|
|
"data": roles,
|
|
}
|
|
c.ServeJSON()
|
|
}
|
|
|
|
// CreateRole 创建角色
|
|
// @router /api/roles [post]
|
|
func (c *RoleController) CreateRole() {
|
|
var role models.Role
|
|
if err := json.Unmarshal(c.Ctx.Input.RequestBody, &role); err != nil {
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 1,
|
|
"message": "参数解析失败: " + err.Error(),
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
|
|
// 验证必填字段
|
|
if role.RoleCode == "" {
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 1,
|
|
"message": "角色代码不能为空",
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
|
|
if role.RoleName == "" {
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 1,
|
|
"message": "角色名称不能为空",
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
|
|
// 检查角色代码是否已存在
|
|
existingRole, err := models.GetRoleByCode(role.RoleCode)
|
|
if err == nil && existingRole != nil {
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 1,
|
|
"message": "角色代码已存在",
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
|
|
// 设置默认值
|
|
if role.Status == 0 {
|
|
role.Status = 1
|
|
}
|
|
|
|
id, err := models.CreateRole(&role)
|
|
if err != nil {
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 1,
|
|
"message": "创建角色失败: " + err.Error(),
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 0,
|
|
"message": "创建角色成功",
|
|
"data": map[string]interface{}{
|
|
"roleId": id,
|
|
},
|
|
}
|
|
c.ServeJSON()
|
|
}
|
|
|
|
// UpdateRole 更新角色
|
|
// @router /api/roles/:id [put]
|
|
func (c *RoleController) UpdateRole() {
|
|
roleId, err := c.GetInt(":id")
|
|
if err != nil || roleId <= 0 {
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 1,
|
|
"message": "角色ID无效",
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
|
|
// 检查角色是否存在
|
|
existingRole, err := models.GetRoleById(roleId)
|
|
if err != nil {
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 1,
|
|
"message": "角色不存在: " + err.Error(),
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
|
|
var role models.Role
|
|
if err := json.Unmarshal(c.Ctx.Input.RequestBody, &role); err != nil {
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 1,
|
|
"message": "参数解析失败: " + err.Error(),
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
|
|
// 如果更新了角色代码,检查是否重复
|
|
if role.RoleCode != "" && role.RoleCode != existingRole.RoleCode {
|
|
codeRole, err := models.GetRoleByCode(role.RoleCode)
|
|
if err == nil && codeRole != nil && codeRole.RoleId != roleId {
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 1,
|
|
"message": "角色代码已存在",
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
}
|
|
|
|
// 设置角色ID
|
|
role.RoleId = roleId
|
|
|
|
err = models.UpdateRole(&role)
|
|
if err != nil {
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 1,
|
|
"message": "更新角色失败: " + err.Error(),
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 0,
|
|
"message": "更新角色成功",
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
}
|
|
|
|
// DeleteRole 删除角色(软删除)
|
|
// @router /api/roles/:id [delete]
|
|
func (c *RoleController) DeleteRole() {
|
|
roleId, err := c.GetInt(":id")
|
|
if err != nil || roleId <= 0 {
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 1,
|
|
"message": "角色ID无效",
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
|
|
// 检查是否为系统默认角色,不允许删除
|
|
role, err := models.GetRoleById(roleId)
|
|
if err != nil {
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 1,
|
|
"message": "角色不存在: " + err.Error(),
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
|
|
// 系统默认角色不允许删除
|
|
if role.RoleCode == "system_admin" || role.RoleCode == "admin" || role.RoleCode == "user" {
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 1,
|
|
"message": "系统默认角色不允许删除",
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
|
|
err = models.DeleteRole(roleId)
|
|
if err != nil {
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 1,
|
|
"message": "删除角色失败: " + err.Error(),
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
return
|
|
}
|
|
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 0,
|
|
"message": "删除角色成功",
|
|
"data": nil,
|
|
}
|
|
c.ServeJSON()
|
|
}
|