97 lines
2.3 KiB
Go
97 lines
2.3 KiB
Go
package services
|
|
|
|
import (
|
|
"errors"
|
|
"gobeyhan/database"
|
|
"gobeyhan/database/models"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type RoleService struct{}
|
|
|
|
func NewRoleService() *RoleService {
|
|
return &RoleService{}
|
|
}
|
|
|
|
// GetAllRoles retrieves all roles
|
|
func (s *RoleService) GetAllRoles() ([]models.Role, error) {
|
|
var roles []models.Role
|
|
err := database.DB.Preload("Permissions").Find(&roles).Error
|
|
return roles, err
|
|
}
|
|
|
|
// GetRoleByID retrieves a role by ID
|
|
func (s *RoleService) GetRoleByID(id uint64) (*models.Role, error) {
|
|
var role models.Role
|
|
err := database.DB.Preload("Permissions").First(&role, id).Error
|
|
|
|
if err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return nil, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
return &role, nil
|
|
}
|
|
|
|
// CreateRole creates a new role
|
|
func (s *RoleService) CreateRole(role *models.Role) error {
|
|
return database.DB.Create(role).Error
|
|
}
|
|
|
|
// UpdateRole updates an existing role
|
|
func (s *RoleService) UpdateRole(id uint64, updates map[string]interface{}) error {
|
|
result := database.DB.Model(&models.Role{}).Where("id = ?", id).Updates(updates)
|
|
if result.Error != nil {
|
|
return result.Error
|
|
}
|
|
if result.RowsAffected == 0 {
|
|
return gorm.ErrRecordNotFound
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// DeleteRole deletes a role by ID
|
|
func (s *RoleService) DeleteRole(id uint64) error {
|
|
result := database.DB.Delete(&models.Role{}, id)
|
|
if result.Error != nil {
|
|
return result.Error
|
|
}
|
|
if result.RowsAffected == 0 {
|
|
return gorm.ErrRecordNotFound
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// AssignPermission assigns a permission to a role
|
|
func (s *RoleService) AssignPermission(roleID, permissionID uint64) error {
|
|
var role models.Role
|
|
if err := database.DB.First(&role, roleID).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
var permission models.Permission
|
|
if err := database.DB.First(&permission, permissionID).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
return database.DB.Model(&role).Association("Permissions").Append(&permission)
|
|
}
|
|
|
|
// RemovePermission removes a permission from a role
|
|
func (s *RoleService) RemovePermission(roleID, permissionID uint64) error {
|
|
var role models.Role
|
|
if err := database.DB.Preload("Permissions").First(&role, roleID).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
var permission models.Permission
|
|
if err := database.DB.First(&permission, permissionID).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
return database.DB.Model(&role).Association("Permissions").Delete(&permission)
|
|
}
|