mirror of
https://github.com/lzh-1625/go_process_manager.git
synced 2025-10-01 14:22:10 +08:00
84 lines
2.5 KiB
Go
84 lines
2.5 KiB
Go
package repository
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/lzh-1625/go_process_manager/internal/app/eum"
|
|
"github.com/lzh-1625/go_process_manager/internal/app/model"
|
|
"github.com/lzh-1625/go_process_manager/internal/app/repository/query"
|
|
"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 {
|
|
per := query.Permission
|
|
if _, err := per.Where(per.Account.Eq(data.Account)).Where(per.Pid.Eq(data.Pid)).First(); errors.Is(err, gorm.ErrRecordNotFound) {
|
|
per.Create(&model.Permission{
|
|
Account: data.Account,
|
|
Pid: data.Pid,
|
|
})
|
|
}
|
|
_, err := per.Where(per.Account.Eq(data.Account)).Where(per.Pid.Eq(data.Pid)).Updates(map[string]any{
|
|
per.Owned.ColumnName().String(): data.Owned,
|
|
per.Start.ColumnName().String(): data.Start,
|
|
per.Stop.ColumnName().String(): data.Stop,
|
|
per.Terminal.ColumnName().String(): data.Terminal,
|
|
per.Log.ColumnName().String(): data.Log,
|
|
per.Write.ColumnName().String(): data.Write,
|
|
})
|
|
return err
|
|
}
|
|
|
|
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 eum.OprPermission) (result []string) {
|
|
tx := query.Permission.Select(query.Process.Name).RightJoin(query.Process, query.Process.Uuid.EqCol(query.Permission.Pid)).Where(query.Permission.Account.Eq(user)).Where(query.Permission.Owned.Is(true))
|
|
switch op {
|
|
case eum.OperationLog:
|
|
tx = tx.Where(query.Permission.Log.Is(true))
|
|
case eum.OperationStart:
|
|
tx = tx.Where(query.Permission.Start.Is(true))
|
|
case eum.OperationStop:
|
|
tx = tx.Where(query.Permission.Stop.Is(true))
|
|
case eum.OperationTerminal:
|
|
tx = tx.Where(query.Permission.Terminal.Is(true))
|
|
case eum.OperationTerminalWrite:
|
|
tx = tx.Where(query.Permission.Write.Is(true))
|
|
}
|
|
tx.Scan(&result)
|
|
return
|
|
}
|