initial permissions endpoint implementation
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2024-01-11 11:34:43 +11:00
parent b77e47ba7e
commit eb5707a376
6 changed files with 203 additions and 9 deletions

View File

@@ -72,10 +72,13 @@ func (g *Group) GroupAdd() (*Group, error) {
} else {
affected, _ := result.RowsAffected()
id, _ := result.LastInsertId()
g.GroupId = int(id)
log.Printf("GroupAdd insert returned result id '%d' affecting %d row(s).\n", id, affected)
}
} else {
log.Printf("GroupAdd group name already exists : '%v'\n", err)
errString := "group with name already exists"
log.Printf("GroupAdd %s\n", errString)
return &Group{}, errors.New(errString)
}
return g, nil

View File

@@ -1,10 +1,102 @@
package models
import (
"errors"
"log"
)
type Permission struct {
PermissionId int `db:"PermissionId"`
Description string `db:"Description"`
ReadOnly bool `db:"ReadOnly"`
SafeId int `db:"SafeId"`
UserId int `db:"UserId"`
GroupId int `db:"GroupId"`
PermissionId int `db:"PermissionId" json:"permissionId"`
Description string `db:"Description" json:"description"`
ReadOnly bool `db:"ReadOnly" json:"readOnly"`
SafeId int `db:"SafeId" json:"safeId"`
UserId int `db:"UserId" json:"userId"`
GroupId int `db:"GroupId" json:"groupId"`
}
// PermissionGetByDesc queries the database for a permission record matching the specified description
func PermissionGetByDesc(description string) (Permission, error) {
var p Permission
// Query database for matching group object
err := db.QueryRowx("SELECT * FROM permissions WHERE Description=?", description).StructScan(&p)
if err != nil {
return p, errors.New("permission not found")
}
return p, nil
}
// PermissionGetById queries the database for a permission record matching the specified permission id
func PermissionGetById(id int) (Permission, error) {
var p Permission
// Query database for matching group object
err := db.QueryRowx("SELECT * FROM permissions WHERE PermissionId=?", id).StructScan(&p)
if err != nil {
return p, errors.New("permission not found")
}
return p, nil
}
// PermissionList returns a list of all permissions in database
func PermissionList() ([]Permission, error) {
var results []Permission
// Query database for groups
rows, err := db.Queryx("SELECT * FROM permissions")
if err != nil {
log.Printf("PermissionList error executing sql record : '%s'\n", err)
return results, err
} else {
// parse all the results into a slice
for rows.Next() {
var p Permission
err = rows.StructScan(&p)
if err != nil {
log.Printf("PermissionList error parsing sql record : '%s'\n", err)
return results, err
}
results = append(results, p)
}
log.Printf("PermissionList retrieved '%d' results\n", len(results))
}
return results, nil
}
// PermissionAdd adds a new permission definition to the database
func (p *Permission) PermissionAdd() (*Permission, error) {
var err error
//var check Permission
if len(p.Description) > 0 {
_, err = PermissionGetByDesc(p.Description)
} else {
return &Permission{}, errors.New("unable to identify permission with supplied parameters")
}
if err != nil && err.Error() == "permission not found" {
log.Printf("PermissionAdd confirmed no existing permission, continuing with creation of permission '%s'\n", p.Description)
result, err := db.NamedExec(("INSERT INTO permissions (Description, SafeId, UserId, GroupId, ReadOnly) VALUES (:Description, :SafeId, :UserId, :GroupId, :ReadOnly);"), p)
if err != nil {
log.Printf("PermissionAdd error executing sql record : '%s'\n", err)
return &Permission{}, err
} else {
affected, _ := result.RowsAffected()
id, _ := result.LastInsertId()
p.PermissionId = int(id)
log.Printf("PermissionAdd insert returned result id '%d' affecting %d row(s).\n", id, affected)
}
} else {
errString := "permission with identical description already exists"
log.Printf("PermissionAdd %s\n", errString)
return &Permission{}, errors.New(errString)
}
return p, nil
}

View File

@@ -111,7 +111,9 @@ func (s *Safe) SafeAdd() (*Safe, error) {
log.Printf("safe: %v\n", s)
}
} else {
log.Printf("SafeAdd safe name already exists : '%v'\n", err)
errString := "safe with name already exists"
log.Printf("SafeAdd %s\n", errString)
return &Safe{}, errors.New(errString)
}
return s, nil