mirror of
https://git.rwth-aachen.de/acs/public/villas/web-backend-go/
synced 2025-03-30 00:00:12 +01:00
fix access checking for scenarios
This commit is contained in:
parent
75aa4a023f
commit
2c79523a50
2 changed files with 24 additions and 13 deletions
|
@ -152,20 +152,32 @@ func (s *Scenario) delete() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (s *Scenario) checkAccess(userID uint, userRole string, operation database.CRUD) bool {
|
||||
func (s *Scenario) checkAccess(userID uint, operation database.CRUD) bool {
|
||||
|
||||
if userRole == "Admin" {
|
||||
db := database.GetDB()
|
||||
u := database.User{}
|
||||
|
||||
err := db.Find(&u, userID).Error
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
if u.Role == "Admin" {
|
||||
return true
|
||||
}
|
||||
|
||||
scenarioUser := database.User{}
|
||||
err = db.Order("ID asc").Model(s).Where("ID = ?", userID).Related(&scenarioUser, "Users").Error
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
|
||||
if !scenarioUser.Active {
|
||||
return false
|
||||
} else if s.IsLocked && operation != database.Read {
|
||||
return false
|
||||
} else {
|
||||
db := database.GetDB()
|
||||
u := database.User{}
|
||||
u.Username = ""
|
||||
err := db.Order("ID asc").Model(s).Where("ID = ?", userID).Related(&u, "Users").Error
|
||||
if err != nil || !u.Active || (s.IsLocked && operation != database.Read) {
|
||||
return false
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -49,14 +49,13 @@ func CheckPermissions(c *gin.Context, operation database.CRUD, scenarioIDsource
|
|||
}
|
||||
|
||||
userID, _ := c.Get(database.UserIDCtx)
|
||||
userRole, _ := c.Get(database.UserRoleCtx)
|
||||
|
||||
err = so.ByID(uint(scenarioID))
|
||||
if helper.DBError(c, err) {
|
||||
return false, so
|
||||
}
|
||||
|
||||
if so.checkAccess(userID.(uint), userRole.(string), operation) == false {
|
||||
if so.checkAccess(userID.(uint), operation) == false {
|
||||
helper.UnprocessableEntityError(c, "Access denied (user has no access or scenario is locked).")
|
||||
return false, so
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue