/
permission.go
102 lines (78 loc) · 2.73 KB
/
permission.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/*
Copyright 2020 Padduck, LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package services
import (
"github.com/pufferpanel/pufferpanel/v2/models"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
type Permission struct {
DB *gorm.DB
}
func (ps *Permission) GetForUser(id uint) ([]*models.Permissions, error) {
allPerms := &models.MultiplePermissions{}
permissions := &models.Permissions{
UserId: &id,
}
err := ps.DB.Preload(clause.Associations).Where(permissions).Find(&allPerms).Error
return *allPerms, err
}
func (ps *Permission) GetForServer(serverId string) ([]*models.Permissions, error) {
allPerms := &models.MultiplePermissions{}
permissions := &models.Permissions{
ServerIdentifier: &serverId,
}
err := ps.DB.Preload(clause.Associations).Where(permissions).Find(&allPerms).Error
return *allPerms, err
}
func (ps *Permission) GetForUserAndServer(userId uint, serverId *string) (*models.Permissions, error) {
permissions := &models.Permissions{
UserId: &userId,
ServerIdentifier: serverId,
}
err := ps.DB.Preload(clause.Associations).Where(permissions).First(permissions).Error
if err != nil && err == gorm.ErrRecordNotFound {
return permissions, nil
}
return permissions, err
}
func (ps *Permission) GetForClient(id uint) ([]*models.Permissions, error) {
allPerms := &models.MultiplePermissions{}
permissions := &models.Permissions{
ClientId: &id,
}
err := ps.DB.Preload(clause.Associations).Where(permissions).Find(&allPerms).Error
return *allPerms, err
}
func (ps *Permission) GetForClientAndServer(id uint, serverId *string) (*models.Permissions, error) {
permissions := &models.Permissions{
ClientId: &id,
ServerIdentifier: serverId,
}
err := ps.DB.Preload(clause.Associations).Where(permissions).FirstOrCreate(permissions).Error
return permissions, err
}
func (ps *Permission) UpdatePermissions(perms *models.Permissions) error {
//update oauth2 with new information
//TODO: THIS NUKES STUFF IF YOU REMOVE GLOBAL PERMS........
/*if perms.ShouldDelete() {
return ps.Remove(perms)
} else {
return ps.DB.Save(perms).Error
}*/
return ps.DB.Save(perms).Error
}
func (ps *Permission) Remove(perms *models.Permissions) error {
//update oauth2 with new information
return ps.DB.Delete(perms).Error
}