初始化
This commit is contained in:
86
server/repository/role_repo.go
Normal file
86
server/repository/role_repo.go
Normal file
@@ -0,0 +1,86 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"seeyon-filesystem/config"
|
||||
"seeyon-filesystem/model"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// RoleRepository 角色数据访问
|
||||
type RoleRepository struct{}
|
||||
|
||||
func NewRoleRepository() *RoleRepository {
|
||||
return &RoleRepository{}
|
||||
}
|
||||
|
||||
// Create 创建角色
|
||||
func (r *RoleRepository) Create(role *model.Role) error {
|
||||
return config.DB.Create(role).Error
|
||||
}
|
||||
|
||||
// FindByID 根据ID查找角色(含权限)
|
||||
func (r *RoleRepository) FindByID(id uint64) (*model.Role, error) {
|
||||
var role model.Role
|
||||
err := config.DB.Preload("Permissions").First(&role, id).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &role, nil
|
||||
}
|
||||
|
||||
// FindByName 根据标识查找角色
|
||||
func (r *RoleRepository) FindByName(name string) (*model.Role, error) {
|
||||
var role model.Role
|
||||
err := config.DB.Where("name = ?", name).First(&role).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &role, nil
|
||||
}
|
||||
|
||||
// List 查询所有角色
|
||||
func (r *RoleRepository) List() ([]model.Role, error) {
|
||||
var roles []model.Role
|
||||
err := config.DB.Preload("Permissions").Order("id ASC").Find(&roles).Error
|
||||
return roles, err
|
||||
}
|
||||
|
||||
// Update 更新角色
|
||||
func (r *RoleRepository) Update(role *model.Role) error {
|
||||
return config.DB.Save(role).Error
|
||||
}
|
||||
|
||||
// Delete 删除角色(仅非系统角色)
|
||||
func (r *RoleRepository) Delete(id uint64) error {
|
||||
return config.DB.Transaction(func(tx *gorm.DB) error {
|
||||
// 删除角色-权限关联
|
||||
if err := tx.Where("role_id = ?", id).Delete(&model.RolePermission{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
// 删除用户-角色关联
|
||||
if err := tx.Where("role_id = ?", id).Delete(&model.UserRole{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
// 删除角色
|
||||
return tx.Delete(&model.Role{}, id).Error
|
||||
})
|
||||
}
|
||||
|
||||
// SetPermissions 设置角色权限(全量替换)
|
||||
func (r *RoleRepository) SetPermissions(roleID uint64, permissionIDs []uint64) error {
|
||||
return config.DB.Transaction(func(tx *gorm.DB) error {
|
||||
// 先删除旧关联
|
||||
if err := tx.Where("role_id = ?", roleID).Delete(&model.RolePermission{}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
// 插入新关联
|
||||
for _, pid := range permissionIDs {
|
||||
rp := model.RolePermission{RoleID: roleID, PermissionID: pid}
|
||||
if err := tx.Create(&rp).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user