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