sqldb-ws/models/user.go
2021-10-29 23:37:32 +02:00

82 lines
1.9 KiB
Go

package models
import (
"errors"
"fmt"
"os"
"strconv"
"forge.redroom.link/yves/sqldb"
"github.com/lib/pq"
"github.com/rs/zerolog/log"
)
var (
UsersRights map[string]*UserRight
username string
)
func GetLogin(user string) {
username = user
}
func Init() {
UsersRights = make(map[string]*UserRight)
db := sqldb.Open(os.Getenv("driverdb"), os.Getenv("paramsdb"))
query, err := db.QueryAssociativeArray("SELECT dbuser.*, dbuserrole.entity_id AS entity_id, dbuserrole.dbrole_id AS role_id, dbtableaccess.userrolerestrictions AS restrictions FROM dbuser INNER JOIN dbuserrole AS dbuserrole ON dbuser.id = dbuserrole.dbuser_id INNER JOIN dbrole ON dbuserrole.dbrole_id = dbrole.id INNER JOIN dbtableaccess ON dbtableaccess.dbrole_id = dbrole.id WHERE login =" + pq.QuoteLiteral(username) + ";")
db.Close()
if err != nil {
log.Error().Msg(err.Error())
}
var UserId, EntityId, RoleId int
var Restrictions, Password, Login string
for _, element := range query {
for key, element := range element {
if key == "login" {
Login = fmt.Sprintf("%v", element)
}
if key == "id" {
UserId, _ = strconv.Atoi(fmt.Sprintf("%v", element))
}
if key == "password" {
Password = fmt.Sprintf("%v", element)
}
if key == "entity_id" {
EntityId, _ = strconv.Atoi(fmt.Sprintf("%v", element))
}
if key == "role_id" {
RoleId, _ = strconv.Atoi(fmt.Sprintf("%v", element))
}
if key == "restrictions" {
Restrictions = Restrictions + fmt.Sprintf("%v", element) + "|"
}
}
}
UsersRights = make(map[string]*UserRight)
u := UserRight{Login, UserId, RoleId, EntityId, Password, Restrictions}
UsersRights[Login] = &u
}
type UserRight struct {
Login string
UserId int
EntityId int
RoleId int
Password string
Restrictions string
}
func GetUser(uid string) (u *UserRight, err error) {
if u, ok := UsersRights[uid]; ok {
return u, nil
}
return nil, errors.New("user not exists")
}