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