combine sql query for user and group permissions
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -285,7 +285,7 @@ func UpdateSecret(c *gin.Context) {
|
|||||||
s.DeviceName = input.DeviceName
|
s.DeviceName = input.DeviceName
|
||||||
s.DeviceCategory = input.DeviceCategory
|
s.DeviceCategory = input.DeviceCategory
|
||||||
|
|
||||||
secretList, err := models.SecretsGetAllowedForGroup(&s, user_id)
|
secretList, err := models.SecretsGetAllowed(&s, user_id)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("error determining secret : '%s'", err)})
|
c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("error determining secret : '%s'", err)})
|
||||||
|
@@ -54,20 +54,20 @@ func (s *Secret) SaveSecret() (*Secret, error) {
|
|||||||
return s, nil
|
return s, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func SecretsGetAllowedForUser(s *Secret, userId string) ([]UserSecret, error) {
|
func SecretsGetAllowed(s *Secret, userId int) ([]UserSecret, error) {
|
||||||
// Query based on group
|
|
||||||
// SELECT users.UserId, users.GroupId, permissions.ReadOnly, permissions.SafeId, safes.SafeName, secrets.* FROM users INNER JOIN groups ON users.GroupId = groups.GroupId INNER JOIN permissions ON groups.GroupId = permissions.GroupId INNER JOIN safes on permissions.SafeId = safes.SafeId INNER JOIN secrets on secrets.SafeId = safes.SafeId WHERE users.UserId = 2
|
|
||||||
var secretResults []UserSecret
|
|
||||||
|
|
||||||
return secretResults, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func SecretsGetAllowedForGroup(s *Secret, userId int) ([]UserSecret, error) {
|
|
||||||
// Query based on group
|
// Query based on group
|
||||||
// SELECT users.UserId, users.GroupId, permissions.ReadOnly, permissions.SafeId, safes.SafeName, secrets.* FROM users INNER JOIN groups ON users.GroupId = groups.GroupId INNER JOIN permissions ON groups.GroupId = permissions.GroupId INNER JOIN safes on permissions.SafeId = safes.SafeId INNER JOIN secrets on secrets.SafeId = safes.SafeId WHERE users.UserId = 2
|
// SELECT users.UserId, users.GroupId, permissions.ReadOnly, permissions.SafeId, safes.SafeName, secrets.* FROM users INNER JOIN groups ON users.GroupId = groups.GroupId INNER JOIN permissions ON groups.GroupId = permissions.GroupId INNER JOIN safes on permissions.SafeId = safes.SafeId INNER JOIN secrets on secrets.SafeId = safes.SafeId WHERE users.UserId = 2
|
||||||
var err error
|
var err error
|
||||||
var secretResults []UserSecret
|
var secretResults []UserSecret
|
||||||
|
|
||||||
|
// Make sure at least one parameter was specified
|
||||||
|
if s.DeviceName == "" && s.DeviceCategory == "" && s.UserName == "" {
|
||||||
|
err = errors.New("no search parameters specified")
|
||||||
|
log.Println(err)
|
||||||
|
return secretResults, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Query for group access
|
||||||
queryArgs := []interface{}{}
|
queryArgs := []interface{}{}
|
||||||
query := `SELECT users.UserId, users.GroupId, permissions.ReadOnly, permissions.SafeId, safes.SafeName, secrets.*
|
query := `SELECT users.UserId, users.GroupId, permissions.ReadOnly, permissions.SafeId, safes.SafeName, secrets.*
|
||||||
FROM users
|
FROM users
|
||||||
@@ -78,13 +78,32 @@ func SecretsGetAllowedForGroup(s *Secret, userId int) ([]UserSecret, error) {
|
|||||||
WHERE users.UserId = ? `
|
WHERE users.UserId = ? `
|
||||||
queryArgs = append(queryArgs, userId)
|
queryArgs = append(queryArgs, userId)
|
||||||
|
|
||||||
// Make sure at least one parameter was specified
|
// Add any other arguments to the query if they were specified
|
||||||
if s.DeviceName == "" && s.DeviceCategory == "" && s.UserName == "" {
|
if s.DeviceName != "" {
|
||||||
err = errors.New("no search parameters specified")
|
query += " AND DeviceName LIKE ? "
|
||||||
log.Println(err)
|
queryArgs = append(queryArgs, s.DeviceName)
|
||||||
return secretResults, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if s.DeviceCategory != "" {
|
||||||
|
query += " AND DeviceCategory LIKE ? "
|
||||||
|
queryArgs = append(queryArgs, s.DeviceCategory)
|
||||||
|
}
|
||||||
|
|
||||||
|
if s.UserName != "" {
|
||||||
|
query += " AND secrets.UserName LIKE ? "
|
||||||
|
queryArgs = append(queryArgs, s.UserName)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Query for user access
|
||||||
|
query += `UNION
|
||||||
|
SELECT users.UserId, users.GroupId, permissions.ReadOnly, permissions.SafeId, safes.SafeName, secrets.*
|
||||||
|
FROM users
|
||||||
|
INNER JOIN permissions ON users.UserId = permissions.UserId
|
||||||
|
INNER JOIN safes on permissions.SafeId = safes.SafeId
|
||||||
|
INNER JOIN secrets on secrets.SafeId = safes.SafeId
|
||||||
|
WHERE users.UserId = ?`
|
||||||
|
queryArgs = append(queryArgs, userId)
|
||||||
|
|
||||||
// Add any other arguments to the query if they were specified
|
// Add any other arguments to the query if they were specified
|
||||||
if s.DeviceName != "" {
|
if s.DeviceName != "" {
|
||||||
query += " AND DeviceName LIKE ? "
|
query += " AND DeviceName LIKE ? "
|
||||||
@@ -102,7 +121,7 @@ func SecretsGetAllowedForGroup(s *Secret, userId int) ([]UserSecret, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Execute the query
|
// Execute the query
|
||||||
//log.Printf("SecretsGetAllowedForGroup query string : '%s'\n%+v\n", query, queryArgs)
|
log.Printf("SecretsGetAllowedForGroup query string : '%s'\n%+v\n", query, queryArgs)
|
||||||
rows, err := db.Queryx(query, queryArgs...)
|
rows, err := db.Queryx(query, queryArgs...)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Reference in New Issue
Block a user