Docker/Voltaserve/api/repo/permission_repo.go
2024-04-17 20:22:30 +02:00

103 lines
2.4 KiB
Go

package repo
import (
"voltaserve/infra"
"gorm.io/gorm"
)
type UserPermission struct {
ID string `json:"id" gorm:"column:id"`
UserID string `json:"userId" gorm:"column:user_id"`
ResourceID string `json:"resourceId" gorm:"column:resource_id"`
Permission string `json:"permission" gorm:"column:permission"`
CreateTime string `json:"createTime" gorm:"column:create_time"`
}
type GroupPermission struct {
ID string `json:"id" gorm:"column:id"`
GroupID string `json:"groupId" gorm:"column:group_id"`
ResourceID string `json:"resourceId" gorm:"column:resource_id"`
Permission string `json:"permission" gorm:"column:permission"`
CreateTime string `json:"createTime" gorm:"column:create_time"`
}
type PermissionRepo interface {
GetUserPermissions(id string) ([]*UserPermission, error)
GetGroupPermissions(id string) ([]*GroupPermission, error)
}
func NewPermissionRepo() PermissionRepo {
return newPermissionRepo()
}
func (UserPermission) TableName() string {
return "userpermission"
}
func (GroupPermission) TableName() string {
return "grouppermission"
}
type userPermissionValue struct {
UserID string `json:"userId,omitempty"`
Value string `json:"value,omitempty"`
}
func (p userPermissionValue) GetUserID() string {
return p.UserID
}
func (p userPermissionValue) GetValue() string {
return p.Value
}
type groupPermissionValue struct {
GroupID string `json:"groupId,omitempty"`
Value string `json:"value,omitempty"`
}
func (p groupPermissionValue) GetGroupID() string {
return p.GroupID
}
func (p groupPermissionValue) GetValue() string {
return p.Value
}
type permissionRepo struct {
db *gorm.DB
}
func newPermissionRepo() *permissionRepo {
return &permissionRepo{
db: infra.GetDb(),
}
}
func (repo *permissionRepo) GetUserPermissions(id string) ([]*UserPermission, error) {
var res []*UserPermission
if db := repo.db.
Raw("SELECT * FROM userpermission WHERE resource_id = ?", id).
Scan(&res); db.Error != nil {
return nil, db.Error
}
if len(res) > 0 {
return res, nil
} else {
return []*UserPermission{}, nil
}
}
func (repo *permissionRepo) GetGroupPermissions(id string) ([]*GroupPermission, error) {
var res []*GroupPermission
if db := repo.db.
Raw("SELECT * FROM grouppermission WHERE resource_id = ?", id).
Scan(&res); db.Error != nil {
return nil, db.Error
}
if len(res) > 0 {
return res, nil
} else {
return []*GroupPermission{}, nil
}
}