更新前后端代码
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"gorm.io/gorm"
|
||||
|
||||
"filestoragesystem/internal/model"
|
||||
)
|
||||
|
||||
// RoleRepo 角色数据访问
|
||||
type RoleRepo struct{ DB *gorm.DB }
|
||||
|
||||
func (r *RoleRepo) Create(role *model.Role) error { return r.DB.Create(role).Error }
|
||||
|
||||
func (r *RoleRepo) FindByID(id uint) (*model.Role, error) {
|
||||
var role model.Role
|
||||
err := r.DB.Preload("Permissions").First(&role, id).Error
|
||||
return &role, err
|
||||
}
|
||||
|
||||
func (r *RoleRepo) FindByCode(code string) (*model.Role, error) {
|
||||
var role model.Role
|
||||
err := r.DB.Where("code = ?", code).First(&role).Error
|
||||
return &role, err
|
||||
}
|
||||
|
||||
func (r *RoleRepo) List() ([]model.Role, error) {
|
||||
var roles []model.Role
|
||||
err := r.DB.Preload("Permissions").Order("id ASC").Find(&roles).Error
|
||||
return roles, err
|
||||
}
|
||||
|
||||
func (r *RoleRepo) Update(role *model.Role) error { return r.DB.Save(role).Error }
|
||||
|
||||
func (r *RoleRepo) Delete(id uint) error { return r.DB.Delete(&model.Role{}, id).Error }
|
||||
|
||||
// ReplacePermissions 覆盖式更新角色权限
|
||||
func (r *RoleRepo) ReplacePermissions(roleID uint, permIDs []uint) error {
|
||||
return r.DB.Transaction(func(tx *gorm.DB) error {
|
||||
if err := tx.Exec("DELETE FROM role_permissions WHERE role_id = ?", roleID).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
for _, pid := range permIDs {
|
||||
if err := tx.Exec("INSERT INTO role_permissions (role_id, permission_id) VALUES (?, ?)", roleID, pid).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
// CountUsersByRole 统计角色下的用户数
|
||||
func (r *RoleRepo) CountUsersByRole(roleID uint) (int64, error) {
|
||||
var n int64
|
||||
err := r.DB.Model(&model.User{}).Where("role_id = ?", roleID).Count(&n).Error
|
||||
return n, err
|
||||
}
|
||||
|
||||
// PermissionRepo 权限数据访问
|
||||
type PermissionRepo struct{ DB *gorm.DB }
|
||||
|
||||
func (r *PermissionRepo) List() ([]model.Permission, error) {
|
||||
var perms []model.Permission
|
||||
err := r.DB.Order("module ASC, id ASC").Find(&perms).Error
|
||||
return perms, err
|
||||
}
|
||||
|
||||
func (r *PermissionRepo) ListByIDs(ids []uint) ([]model.Permission, error) {
|
||||
var perms []model.Permission
|
||||
err := r.DB.Where("id IN ?", ids).Find(&perms).Error
|
||||
return perms, err
|
||||
}
|
||||
|
||||
func (r *PermissionRepo) ListByRole(roleID uint) ([]model.Permission, error) {
|
||||
var perms []model.Permission
|
||||
err := r.DB.
|
||||
Joins("JOIN role_permissions rp ON rp.permission_id = permissions.id").
|
||||
Where("rp.role_id = ?", roleID).Find(&perms).Error
|
||||
return perms, err
|
||||
}
|
||||
Reference in New Issue
Block a user