初始化
This commit is contained in:
144
server/service/permission_service.go
Normal file
144
server/service/permission_service.go
Normal file
@@ -0,0 +1,144 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"seeyon-filesystem/model"
|
||||
"seeyon-filesystem/repository"
|
||||
)
|
||||
|
||||
// PermissionService RBAC权限服务
|
||||
// 管理角色、权限的CRUD以及权限检查
|
||||
type PermissionService struct {
|
||||
roleRepo *repository.RoleRepository
|
||||
permissionRepo *repository.PermissionRepository
|
||||
userRoleRepo *repository.UserRoleRepository
|
||||
userRepo *repository.UserRepository
|
||||
}
|
||||
|
||||
// NewPermissionService 创建权限服务实例
|
||||
func NewPermissionService() *PermissionService {
|
||||
return &PermissionService{
|
||||
roleRepo: repository.NewRoleRepository(),
|
||||
permissionRepo: repository.NewPermissionRepository(),
|
||||
userRoleRepo: repository.NewUserRoleRepository(),
|
||||
userRepo: repository.NewUserRepository(),
|
||||
}
|
||||
}
|
||||
|
||||
// ========== 角色管理 ==========
|
||||
|
||||
// CreateRole 创建角色
|
||||
func (s *PermissionService) CreateRole(role *model.Role) error {
|
||||
existing, _ := s.roleRepo.FindByName(role.Name)
|
||||
if existing != nil {
|
||||
return errors.New("角色标识已存在")
|
||||
}
|
||||
return s.roleRepo.Create(role)
|
||||
}
|
||||
|
||||
// GetRole 获取角色详情
|
||||
func (s *PermissionService) GetRole(id uint64) (*model.Role, error) {
|
||||
return s.roleRepo.FindByID(id)
|
||||
}
|
||||
|
||||
// ListRoles 获取所有角色列表
|
||||
func (s *PermissionService) ListRoles() ([]model.Role, error) {
|
||||
return s.roleRepo.List()
|
||||
}
|
||||
|
||||
// UpdateRole 更新角色
|
||||
func (s *PermissionService) UpdateRole(role *model.Role) error {
|
||||
existing, err := s.roleRepo.FindByID(role.ID)
|
||||
if err != nil {
|
||||
return errors.New("角色不存在")
|
||||
}
|
||||
// 系统内置角色不允许修改标识
|
||||
if existing.IsSystem == 1 && existing.Name != role.Name {
|
||||
return errors.New("系统内置角色不允许修改标识")
|
||||
}
|
||||
role.IsSystem = existing.IsSystem
|
||||
return s.roleRepo.Update(role)
|
||||
}
|
||||
|
||||
// DeleteRole 删除角色
|
||||
func (s *PermissionService) DeleteRole(id uint64) error {
|
||||
role, err := s.roleRepo.FindByID(id)
|
||||
if err != nil {
|
||||
return errors.New("角色不存在")
|
||||
}
|
||||
if role.IsSystem == 1 {
|
||||
return errors.New("系统内置角色不允许删除")
|
||||
}
|
||||
return s.roleRepo.Delete(id)
|
||||
}
|
||||
|
||||
// SetRolePermissions 设置角色权限
|
||||
func (s *PermissionService) SetRolePermissions(roleID uint64, permissionIDs []uint64) error {
|
||||
_, err := s.roleRepo.FindByID(roleID)
|
||||
if err != nil {
|
||||
return errors.New("角色不存在")
|
||||
}
|
||||
return s.roleRepo.SetPermissions(roleID, permissionIDs)
|
||||
}
|
||||
|
||||
// ========== 权限管理 ==========
|
||||
|
||||
// CreatePermission 创建权限
|
||||
func (s *PermissionService) CreatePermission(perm *model.Permission) error {
|
||||
existing, _ := s.permissionRepo.FindByCode(perm.Code)
|
||||
if existing != nil {
|
||||
return errors.New("权限标识已存在")
|
||||
}
|
||||
return s.permissionRepo.Create(perm)
|
||||
}
|
||||
|
||||
// ListPermissions 获取所有权限列表
|
||||
func (s *PermissionService) ListPermissions() ([]model.Permission, error) {
|
||||
return s.permissionRepo.List()
|
||||
}
|
||||
|
||||
// UpdatePermission 更新权限
|
||||
func (s *PermissionService) UpdatePermission(perm *model.Permission) error {
|
||||
return s.permissionRepo.Update(perm)
|
||||
}
|
||||
|
||||
// DeletePermission 删除权限
|
||||
func (s *PermissionService) DeletePermission(id uint64) error {
|
||||
return s.permissionRepo.Delete(id)
|
||||
}
|
||||
|
||||
// ========== 用户角色管理 ==========
|
||||
|
||||
// SetUserRoles 设置用户角色
|
||||
func (s *PermissionService) SetUserRoles(userID uint64, roleIDs []uint64) error {
|
||||
_, err := s.userRepo.FindByID(userID)
|
||||
if err != nil {
|
||||
return errors.New("用户不存在")
|
||||
}
|
||||
return s.userRoleRepo.SetUserRoles(userID, roleIDs)
|
||||
}
|
||||
|
||||
// GetUserRoles 获取用户的角色列表
|
||||
func (s *PermissionService) GetUserRoles(userID uint64) ([]model.Role, error) {
|
||||
return s.userRoleRepo.GetUserRoles(userID)
|
||||
}
|
||||
|
||||
// GetUserPermissions 获取用户的权限列表(通过角色计算)
|
||||
func (s *PermissionService) GetUserPermissions(userID uint64) ([]string, error) {
|
||||
return s.permissionRepo.GetUserPermissionCodes(userID)
|
||||
}
|
||||
|
||||
// HasPermission 检查用户是否拥有指定权限
|
||||
func (s *PermissionService) HasPermission(userID uint64, permissionCode string) (bool, error) {
|
||||
codes, err := s.permissionRepo.GetUserPermissionCodes(userID)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
for _, code := range codes {
|
||||
if code == permissionCode {
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
return false, nil
|
||||
}
|
||||
Reference in New Issue
Block a user