new add role feature
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2024-01-04 09:43:59 +11:00
parent f7168d465a
commit 0619b497f7
5 changed files with 105 additions and 9 deletions

View File

@@ -1,12 +1,16 @@
package models
import "log"
import (
"errors"
"log"
)
type Role struct {
RoleId int `db:"RoleId"`
RoleName string `db:"RoleName"`
ReadOnly bool `db:"ReadOnly"`
Admin bool `db:"Admin"`
RoleId int `db:"RoleId"`
RoleName string `db:"RoleName"`
LdapGroup string `db:"LdapGroup"`
ReadOnly bool `db:"ReadOnly"`
Admin bool `db:"Admin"`
}
func QueryRoles() ([]Role, error) {
@@ -35,3 +39,45 @@ func QueryRoles() ([]Role, error) {
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
}