duidui_fiber/internal/admin_auth/service/permission_service.go
2026-03-27 10:34:03 +08:00

95 lines
2.4 KiB
Go

package service
import (
"fmt"
"dd_fiber_api/internal/admin_auth"
"dd_fiber_api/internal/admin_auth/dao"
"dd_fiber_api/pkg/snowflake"
)
// PermissionService 权限服务
type PermissionService struct {
permissionDAO *dao.PermissionDAO
}
// NewPermissionService 创建权限服务
func NewPermissionService(permissionDAO *dao.PermissionDAO) *PermissionService {
return &PermissionService{
permissionDAO: permissionDAO,
}
}
// ListPermissions 列出权限
func (s *PermissionService) ListPermissions(keyword, resource string, page, pageSize int) ([]*admin_auth.AdminPermission, int, error) {
if page < 1 {
page = 1
}
if pageSize < 1 {
pageSize = 10
}
if pageSize > 100 {
pageSize = 100
}
return s.permissionDAO.List(keyword, resource, page, pageSize)
}
// GetPermission 获取权限详情
func (s *PermissionService) GetPermission(id string) (*admin_auth.AdminPermission, error) {
return s.permissionDAO.GetByID(id)
}
// CreatePermission 创建权限
func (s *PermissionService) CreatePermission(permission *admin_auth.AdminPermission) error {
// 检查代码是否已存在
existing, err := s.permissionDAO.GetByCode(permission.Code)
if err != nil {
return fmt.Errorf("检查权限代码失败: %v", err)
}
if existing != nil {
return fmt.Errorf("权限代码已存在: %s", permission.Code)
}
// 生成ID
permission.ID = snowflake.GenerateID()
return s.permissionDAO.Create(permission)
}
// UpdatePermission 更新权限
func (s *PermissionService) UpdatePermission(permission *admin_auth.AdminPermission) error {
// 检查权限是否存在
existing, err := s.permissionDAO.GetByID(permission.ID)
if err != nil {
return fmt.Errorf("查询权限失败: %v", err)
}
if existing == nil {
return fmt.Errorf("权限不存在")
}
// 如果修改了代码,检查新代码是否已存在
if permission.Code != existing.Code {
codeExists, err := s.permissionDAO.GetByCode(permission.Code)
if err != nil {
return fmt.Errorf("检查权限代码失败: %v", err)
}
if codeExists != nil {
return fmt.Errorf("权限代码已存在: %s", permission.Code)
}
}
return s.permissionDAO.Update(permission)
}
// DeletePermission 删除权限
func (s *PermissionService) DeletePermission(id string) error {
return s.permissionDAO.Delete(id)
}
// GetResources 获取所有资源列表
func (s *PermissionService) GetResources() ([]string, error) {
return s.permissionDAO.GetResources()
}