60 lines
1.6 KiB
Go
60 lines
1.6 KiB
Go
package repositories
|
|
|
|
import (
|
|
"gitea.zjmud.xyz/phyer/rbac/models"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func CreateRole(role *models.Role) (*models.Role, error) {
|
|
result := db.Create(role)
|
|
return role, result.Error
|
|
}
|
|
|
|
func GetAllRoles() ([]models.Role, error) {
|
|
var roles []models.Role
|
|
result := db.Find(&roles)
|
|
return roles, result.Error
|
|
}
|
|
|
|
func GetRoleByID(id uint) (*models.Role, error) {
|
|
var role models.Role
|
|
result := db.First(&role, id)
|
|
return &role, result.Error
|
|
}
|
|
|
|
func CheckRoleExists(name string) (bool, error) {
|
|
var count int64
|
|
result := db.Model(&models.Role{}).Where("name = ?", name).Count(&count)
|
|
return count > 0, result.Error
|
|
}
|
|
|
|
func AddPermissionToRole(roleID, permissionID uint) error {
|
|
role := &models.Role{Model: gorm.Model{ID: roleID}}
|
|
permission := &models.Permission{Model: gorm.Model{ID: permissionID}}
|
|
return db.Model(role).Association("Permissions").Append(permission)
|
|
}
|
|
|
|
func GetRoles() ([]models.Role, error) {
|
|
var roles []models.Role
|
|
result := db.Preload("Permissions").Find(&roles)
|
|
return roles, result.Error
|
|
}
|
|
|
|
func UpdateRole(id uint, updateData map[string]interface{}) (*models.Role, error) {
|
|
var role models.Role
|
|
result := db.Model(&role).Where("id = ?", id).Updates(updateData)
|
|
if result.Error != nil {
|
|
return nil, result.Error
|
|
}
|
|
return GetRoleByID(id)
|
|
}
|
|
|
|
func DeleteRole(id uint) error {
|
|
result := db.Delete(&models.Role{}, id)
|
|
return result.Error
|
|
}
|
|
|
|
func RemovePermissionFromRole(roleID uint, permissionID uint) error {
|
|
return db.Model(&models.Role{Model: gorm.Model{ID: roleID}}).Association("Permissions").Delete(&models.Permission{Model: gorm.Model{ID: permissionID}})
|
|
}
|