Files
go_process_manager/internal/app/repository/permission.go
17689440205 460a1f428b update
2025-01-26 16:43:51 +08:00

56 lines
2.0 KiB
Go

package repository
import (
"reflect"
"github.com/lzh-1625/go_process_manager/internal/app/constants"
"github.com/lzh-1625/go_process_manager/internal/app/model"
"github.com/lzh-1625/go_process_manager/log"
"gorm.io/gorm"
)
type permissionRepository struct{}
var PermissionRepository = new(permissionRepository)
func (p *permissionRepository) GetPermssionList(account string) []model.PermissionPo {
result := []model.PermissionPo{}
if err := db.Raw(`SELECT p.name ,p.uuid as pid,p2.owned ,p2."start" ,p2.stop ,p2.terminal,p2.log ,p2.write
FROM users u full join process p left join permission p2 on p2.account == u.account and p2.pid =p.uuid
WHERE u.account = ? or u.account ISNULL`, account).Find(&result); err.Error != nil {
log.Logger.Warnw("权限查询失败", "err", err)
}
return result
}
func (p *permissionRepository) EditPermssion(data model.Permission) error {
if db.Model(&model.Permission{}).Where(&model.Permission{Account: data.Account, Pid: data.Pid}).First(nil).Error == gorm.ErrRecordNotFound {
db.Omit("name").Create(&model.Permission{
Account: data.Account,
Pid: data.Pid,
})
}
return db.Model(&model.Permission{}).Where(&model.Permission{Account: data.Account, Pid: data.Pid}).Updates(map[string]interface{}{
"owned": data.Owned,
"start": data.Start,
"stop": data.Stop,
"terminal": data.Terminal,
"log": data.Log,
"write": data.Write,
}).Error
}
func (p *permissionRepository) GetPermission(user string, pid int) (result model.Permission) {
db.Model(&model.Permission{}).Where(&model.Permission{Account: user, Pid: int32(pid)}).First(&result)
return
}
func (p *permissionRepository) GetProcessNameByPermission(user string, op constants.OprPermission) (result []string) {
query := model.PermissionPo{Account: user, Owned: true}
reflect.ValueOf(&query).Elem().FieldByName(string(op)).SetBool(true)
db.Model(&model.Permission{}).Select("name").Joins("right join process p on p.uuid = pid").Where(query).Find(&result)
return
}