first commit
This commit is contained in:
96
app/account/services/role_service.go
Normal file
96
app/account/services/role_service.go
Normal file
@@ -0,0 +1,96 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user