Files
smt/models/role.go.txt
Nathan Coad dbc2276d68
All checks were successful
continuous-integration/drone/push Build is passing
test
2024-01-09 09:51:32 +11:00

84 lines
2.0 KiB
Plaintext

package models
import (
"errors"
"log"
)
type Role struct {
RoleId int `db:"RoleId"`
RoleName string `db:"RoleName"`
LdapGroup string `db:"LdapGroup"`
ReadOnly bool `db:"ReadOnly"`
Admin bool `db:"Admin"`
}
func QueryRoles() ([]Role, error) {
var results []Role
// Query database for role definitions
rows, err := db.Queryx("SELECT * FROM roles")
if err != nil {
log.Printf("QueryRoles error executing sql record : '%s'\n", err)
return results, err
} else {
// parse all the results into a slice
for rows.Next() {
var r Role
err = rows.StructScan(&r)
if err != nil {
log.Printf("QueryRoles error parsing sql record : '%s'\n", err)
return results, err
}
results = append(results, r)
}
log.Printf("QueryRoles retrieved '%d' results\n", len(results))
}
return results, nil
}
// AddRole adds a new role definition to the database
func (r *Role) AddRole() (*Role, error) {
var err error
// Validate role not already in use
_, err = GetRoleByName(r.RoleName)
// TODO
if err != nil && err.Error() == "role not found" {
log.Printf("AddRole confirmed no existing role, continuing with creation of role '%s'\n", r.RoleName)
result, err := db.NamedExec(("INSERT INTO roles (RoleName, ReadOnly, Admin, LdapGroup) VALUES (:RoleName, :ReadOnly, :Admin, :LdapGroup);"), r)
if err != nil {
log.Printf("AddRole error executing sql record : '%s'\n", err)
return &Role{}, err
} else {
affected, _ := result.RowsAffected()
id, _ := result.LastInsertId()
log.Printf("AddRole insert returned result id '%d' affecting %d row(s).\n", id, affected)
}
} else {
log.Printf("AddRole RoleName already exists : '%v'\n", err)
}
return r, nil
}
func GetRoleByName(rolename string) (Role, error) {
var r Role
// Query database for matching user object
err := db.QueryRowx("SELECT * FROM roles WHERE RoleName=?", rolename).StructScan(&r)
if err != nil {
return r, errors.New("role not found")
}
return r, nil
}