mirror of
https://github.com/gravitl/netmaker.git
synced 2025-12-24 13:28:22 +08:00
feat(go): add auditor role; (#3684)
This commit is contained in:
@@ -2,10 +2,11 @@ package logic
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/golang-jwt/jwt/v4"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/golang-jwt/jwt/v4"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/gravitl/netmaker/models"
|
||||
"github.com/gravitl/netmaker/servercfg"
|
||||
@@ -24,7 +25,6 @@ var GlobalPermissionsCheck = func(username string, r *http.Request) error { retu
|
||||
|
||||
// SecurityCheck - Check if user has appropriate permissions
|
||||
func SecurityCheck(reqAdmin bool, next http.Handler) http.HandlerFunc {
|
||||
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
r.Header.Set("ismaster", "no")
|
||||
isGlobalAccesss := r.Header.Get("IS_GLOBAL_ACCESS") == "yes"
|
||||
|
||||
@@ -102,6 +102,7 @@ const (
|
||||
AdminRole UserRoleID = "admin"
|
||||
ServiceUser UserRoleID = "service-user"
|
||||
PlatformUser UserRoleID = "platform-user"
|
||||
Auditor UserRoleID = "auditor"
|
||||
NetworkAdmin UserRoleID = "network-admin"
|
||||
NetworkUser UserRoleID = "network-user"
|
||||
)
|
||||
|
||||
@@ -44,6 +44,15 @@ func NetworkPermissionsCheck(username string, r *http.Request) error {
|
||||
if userRole.FullAccess {
|
||||
return nil
|
||||
}
|
||||
|
||||
if userRole.ID == models.Auditor {
|
||||
if r.Method == http.MethodGet {
|
||||
return nil
|
||||
} else {
|
||||
return errors.New("access denied")
|
||||
}
|
||||
}
|
||||
|
||||
// get info from header to determine the target rsrc
|
||||
targetRsrc := r.Header.Get("TARGET_RSRC")
|
||||
targetRsrcID := r.Header.Get("TARGET_RSRC_ID")
|
||||
@@ -160,6 +169,15 @@ func GlobalPermissionsCheck(username string, r *http.Request) error {
|
||||
if userRole.FullAccess {
|
||||
return nil
|
||||
}
|
||||
|
||||
if userRole.ID == models.Auditor {
|
||||
if r.Method == http.MethodGet {
|
||||
return nil
|
||||
} else {
|
||||
return errors.New("access denied")
|
||||
}
|
||||
}
|
||||
|
||||
targetRsrc := r.Header.Get("TARGET_RSRC")
|
||||
targetRsrcID := r.Header.Get("TARGET_RSRC_ID")
|
||||
if targetRsrc == "" {
|
||||
|
||||
@@ -43,6 +43,20 @@ var PlatformUserUserPermissionTemplate = models.UserRolePermissionTemplate{
|
||||
},
|
||||
}
|
||||
|
||||
var AuditorUserPermissionTemplate = models.UserRolePermissionTemplate{
|
||||
ID: models.Auditor,
|
||||
Default: true,
|
||||
DenyDashboardAccess: false,
|
||||
FullAccess: false,
|
||||
NetworkLevelAccess: map[models.RsrcType]map[models.RsrcID]models.RsrcPermissionScope{
|
||||
models.NetworkRsrc: {
|
||||
models.AllNetworkRsrcID: models.RsrcPermissionScope{
|
||||
Read: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
var NetworkAdminAllPermissionTemplate = models.UserRolePermissionTemplate{
|
||||
ID: globalNetworksAdminRoleID,
|
||||
Name: "Network Admins",
|
||||
@@ -122,6 +136,8 @@ func UserRolesInit() {
|
||||
database.Insert(ServiceUserPermissionTemplate.ID.String(), string(d), database.USER_PERMISSIONS_TABLE_NAME)
|
||||
d, _ = json.Marshal(PlatformUserUserPermissionTemplate)
|
||||
database.Insert(PlatformUserUserPermissionTemplate.ID.String(), string(d), database.USER_PERMISSIONS_TABLE_NAME)
|
||||
d, _ = json.Marshal(AuditorUserPermissionTemplate)
|
||||
database.Insert(AuditorUserPermissionTemplate.ID.String(), string(d), database.USER_PERMISSIONS_TABLE_NAME)
|
||||
d, _ = json.Marshal(NetworkAdminAllPermissionTemplate)
|
||||
database.Insert(NetworkAdminAllPermissionTemplate.ID.String(), string(d), database.USER_PERMISSIONS_TABLE_NAME)
|
||||
d, _ = json.Marshal(NetworkUserAllPermissionTemplate)
|
||||
@@ -992,6 +1008,13 @@ func FilterNetworksByRole(allnetworks []models.Network, user models.User) []mode
|
||||
}
|
||||
if !platformRole.FullAccess {
|
||||
allNetworkRoles := make(map[models.NetworkID]struct{})
|
||||
_, ok := platformRole.NetworkLevelAccess[models.NetworkRsrc]
|
||||
if ok {
|
||||
perm, ok := platformRole.NetworkLevelAccess[models.NetworkRsrc][models.AllNetworkRsrcID]
|
||||
if ok && perm.Read {
|
||||
return allnetworks
|
||||
}
|
||||
}
|
||||
if len(user.NetworkRoles) > 0 {
|
||||
for netID := range user.NetworkRoles {
|
||||
if netID == models.AllNetworks {
|
||||
@@ -1011,7 +1034,6 @@ func FilterNetworksByRole(allnetworks []models.Network, user models.User) []mode
|
||||
return allnetworks
|
||||
}
|
||||
allNetworkRoles[netID] = struct{}{}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user