Files
2025-07-29 12:45:07 +08:00

227 lines
6.8 KiB
Go

package service
import (
"context"
"cms-api/internal/dao"
"cms-api/internal/model"
"encoding/json"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gtime"
)
type sRole struct{}
func Role() *sRole {
return &sRole{}
}
// GetById 根据ID获取角色信息
func (s *sRole) GetById(ctx context.Context, id int) (*model.Role, error) {
return dao.Role.GetById(ctx, id)
}
// List 获取角色列表
func (s *sRole) List(ctx context.Context, req *model.RoleListRequest) (*model.PageResponse, error) {
var (
page = req.Page
pageSize = req.PageSize
)
if page <= 0 {
page = 1
}
if pageSize <= 0 {
pageSize = 10
}
// 设置分页参数
req.Page = page
req.PageSize = pageSize
// 获取列表
roles, total, err := dao.Role.List(ctx, req)
if err != nil {
return nil, err
}
return &model.PageResponse{
List: roles,
Total: total,
Page: page,
PageSize: pageSize,
TotalPages: (total + pageSize - 1) / pageSize,
}, nil
}
// GetAll 获取所有启用的角色
func (s *sRole) GetAll(ctx context.Context) ([]*model.Role, error) {
return dao.Role.GetAll(ctx)
}
// Create 创建角色
func (s *sRole) Create(ctx context.Context, req *model.CreateRoleRequest) error {
// 检查角色名称是否存在
existRole, err := dao.Role.GetByName(ctx, req.Name)
if err != nil {
return err
}
if existRole != nil {
return gerror.New("角色名称已存在")
}
// 序列化权限列表
permissionsJson, err := json.Marshal(req.Permissions)
if err != nil {
return gerror.New("权限数据格式错误")
}
// 创建角色
role := &model.Role{
Name: req.Name,
Description: req.Description,
Permissions: string(permissionsJson),
Status: req.Status,
CreatedAt: gtime.Now(),
UpdatedAt: gtime.Now(),
}
_, err = dao.Role.Create(ctx, role)
return err
}
// Update 更新角色
func (s *sRole) Update(ctx context.Context, id int, req *model.UpdateRoleRequest) error {
// 检查角色是否存在
role, err := s.GetById(ctx, id)
if err != nil {
return err
}
if role == nil {
return gerror.New("角色不存在")
}
// 检查角色名称是否被其他角色使用
existRole, err := dao.Role.GetByName(ctx, req.Name)
if err != nil {
return err
}
if existRole != nil && existRole.Id != id {
return gerror.New("角色名称已被使用")
}
// 序列化权限列表
permissionsJson, err := json.Marshal(req.Permissions)
if err != nil {
return gerror.New("权限数据格式错误")
}
// 更新角色
updateData := g.Map{
"name": req.Name,
"description": req.Description,
"permissions": string(permissionsJson),
"status": req.Status,
"updated_at": gtime.Now(),
}
return dao.Role.Update(ctx, id, updateData)
}
// Delete 删除角色
func (s *sRole) Delete(ctx context.Context, id int) error {
// 检查角色是否存在
role, err := s.GetById(ctx, id)
if err != nil {
return err
}
if role == nil {
return gerror.New("角色不存在")
}
// TODO: 检查是否有用户使用该角色
// 这里可以添加检查逻辑,防止删除正在使用的角色
return dao.Role.Delete(ctx, id)
}
// UpdateStatus 更新角色状态
func (s *sRole) UpdateStatus(ctx context.Context, id int, status int) error {
// 检查角色是否存在
role, err := s.GetById(ctx, id)
if err != nil {
return err
}
if role == nil {
return gerror.New("角色不存在")
}
return dao.Role.UpdateStatus(ctx, id, status)
}
// GetPermissions 获取所有可用权限
func (s *sRole) GetPermissions(ctx context.Context) ([]model.PermissionGroup, error) {
// 定义系统权限
permissions := []model.PermissionGroup{
{
Name: "用户管理",
Description: "用户相关权限",
Permissions: []model.Permission{
{Key: "user.list", Name: "查看用户列表", Description: "查看用户列表权限", Group: "用户管理"},
{Key: "user.create", Name: "创建用户", Description: "创建用户权限", Group: "用户管理"},
{Key: "user.update", Name: "编辑用户", Description: "编辑用户权限", Group: "用户管理"},
{Key: "user.delete", Name: "删除用户", Description: "删除用户权限", Group: "用户管理"},
{Key: "user.status", Name: "管理用户状态", Description: "管理用户状态权限", Group: "用户管理"},
},
},
{
Name: "角色管理",
Description: "角色权限相关权限",
Permissions: []model.Permission{
{Key: "role.list", Name: "查看角色列表", Description: "查看角色列表权限", Group: "角色管理"},
{Key: "role.create", Name: "创建角色", Description: "创建角色权限", Group: "角色管理"},
{Key: "role.update", Name: "编辑角色", Description: "编辑角色权限", Group: "角色管理"},
{Key: "role.delete", Name: "删除角色", Description: "删除角色权限", Group: "角色管理"},
},
},
{
Name: "内容管理",
Description: "内容相关权限",
Permissions: []model.Permission{
{Key: "article.list", Name: "查看文章列表", Description: "查看文章列表权限", Group: "内容管理"},
{Key: "article.create", Name: "创建文章", Description: "创建文章权限", Group: "内容管理"},
{Key: "article.update", Name: "编辑文章", Description: "编辑文章权限", Group: "内容管理"},
{Key: "article.delete", Name: "删除文章", Description: "删除文章权限", Group: "内容管理"},
{Key: "news.list", Name: "查看新闻列表", Description: "查看新闻列表权限", Group: "内容管理"},
{Key: "news.create", Name: "创建新闻", Description: "创建新闻权限", Group: "内容管理"},
{Key: "news.update", Name: "编辑新闻", Description: "编辑新闻权限", Group: "内容管理"},
{Key: "news.delete", Name: "删除新闻", Description: "删除新闻权限", Group: "内容管理"},
},
},
{
Name: "附件管理",
Description: "附件相关权限",
Permissions: []model.Permission{
{Key: "attachment.list", Name: "查看附件列表", Description: "查看附件列表权限", Group: "附件管理"},
{Key: "attachment.upload", Name: "上传附件", Description: "上传附件权限", Group: "附件管理"},
{Key: "attachment.delete", Name: "删除附件", Description: "删除附件权限", Group: "附件管理"},
},
},
{
Name: "系统管理",
Description: "系统相关权限",
Permissions: []model.Permission{
{Key: "config.list", Name: "查看系统配置", Description: "查看系统配置权限", Group: "系统管理"},
{Key: "config.update", Name: "修改系统配置", Description: "修改系统配置权限", Group: "系统管理"},
},
},
}
return permissions, nil
}
// CheckPermission 检查权限
func (s *sRole) CheckPermission(ctx context.Context, roleId int, permission string) (bool, error) {
return dao.Role.CheckPermission(ctx, roleId, permission)
}