add org structure

This commit is contained in:
andrusyakka
2023-07-05 18:44:22 +03:00
parent ac08cceda0
commit 9234b577bb
8 changed files with 57 additions and 11 deletions

View File

@@ -22,11 +22,11 @@ type Config struct {
func New() *Config {
return &Config{
MSHosts: MSHostsConfig{
UsersHost: getEnv("ASTRA-USERS", ""),
StoreHost: getEnv("ASTRA-FILE-STORAGE", ""),
UsersHost: getEnv("ASTRA-USERS", "http://localhost:8082"),
StoreHost: getEnv("ASTRA-FILE-STORAGE", "http://localhost:8081"),
},
Server: ServerConfig{
Port: getEnv("PORT", ""),
Port: getEnv("PORT", "8080"),
JWTSecret: getEnv("JWT_SECRET", "secret"),
},
}

10
main.go
View File

@@ -40,6 +40,8 @@ func main() {
e.DELETE("/users/:id", users.DeleteUser)
e.PATCH("/users/:id", users.UpdateUser)
e.GET("/organizations", users.GetOrganizations)
// Store
store_g := e.Group("/store")
store_g.GET("/*", store.GetFileFromStore)
@@ -48,5 +50,11 @@ func main() {
}
func checkAuth(c echo.Context) error {
return c.HTML(http.StatusOK, c.Request().Header.Get("UserId"))
result := c.Request().Header.Get("UserId") + ", " +
c.Request().Header.Get("UserRole") + ", " +
c.Request().Header.Get("UserOrganizationId") + ", " +
c.Request().Header.Get("UserRightMask") + ", " +
c.Request().Header.Get("UserPosition")
return c.HTML(http.StatusOK, result)
}

8
model/position.go Normal file
View File

@@ -0,0 +1,8 @@
package model
type Position struct {
Name string `json:"name" gorm:"unique;index"`
RightMask int `json:"right_mask"`
OrganizationID uint `json:"organization_id"`
Users []User `json:"users,omitempty"`
}

View File

@@ -5,9 +5,12 @@ import "gorm.io/gorm"
type (
User struct {
gorm.Model
UserName string `json:"userName" gorm:"unique"`
Password string `json:"password,omitempty"`
FirstName string `json:"firstName"`
LastName string `json:"lastName"`
UserName string `json:"user_name" gorm:"unique;index"`
Password string `json:"password,omitempty"`
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
Role string `json:"role" gorm:"default:employee"`
PositionID uint `json:"-"`
Position Position `gorm:"-:migration"`
}
)

View File

@@ -4,7 +4,14 @@ import (
"github.com/labstack/echo/v4"
)
var NOT_ALLOWED_HEADERS = [2]string{"UserId", "Authorization"}
var NOT_ALLOWED_HEADERS = [6]string{
"UserId",
"Authorization",
"UserRole",
"UserOrganizationId",
"UserRightMask",
"UserPosition",
}
func FilterHeaders(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {

View File

@@ -21,6 +21,10 @@ var JWT_MW = echojwt.WithConfig(echojwt.Config{
user := c.Get("user").(*jwt.Token)
claims := user.Claims.(jwt.MapClaims)
c.Request().Header.Set("UserId", claims["id"].(string))
c.Request().Header.Set("UserRole", claims["role"].(string))
c.Request().Header.Set("UserOrganizationId", claims["position_name"].(string))
c.Request().Header.Set("UserRightMask", claims["position_rm"].(string))
c.Request().Header.Set("UserPosition", claims["position_org_id"].(string))
c.Request().Header.Del("Authorization")
},
})

View File

@@ -11,7 +11,7 @@ import (
func GetFileFromStore(c echo.Context) error {
fileName := strings.ReplaceAll(c.Request().RequestURI, "/store", "")
data, err, req := api.GetRequest(
data, err, resp := api.GetRequest(
config.Env.MSHosts.StoreHost+fileName,
c.Request().Header,
)
@@ -19,5 +19,5 @@ func GetFileFromStore(c echo.Context) error {
return c.NoContent(http.StatusBadGateway)
}
return c.Blob(req.StatusCode, req.Header.Get("Content-Type"), data)
return c.Blob(resp.StatusCode, resp.Header.Get("Content-Type"), data)
}

View File

@@ -38,6 +38,10 @@ func Login(c echo.Context) (err error) {
claims := token.Claims.(jwt.MapClaims)
claims["id"] = strconv.Itoa(int(u.ID))
claims["exp"] = time.Now().Add(time.Hour * 72).Unix()
claims["role"] = u.Role
claims["position_name"] = u.Position.Name
claims["position_rm"] = strconv.Itoa(u.Position.RightMask)
claims["position_org_id"] = strconv.Itoa(int(u.Position.OrganizationID))
var _token, _ = token.SignedString([]byte(config.Env.Server.JWTSecret))
if err != nil {
@@ -109,3 +113,15 @@ func UpdateUser(c echo.Context) (err error) {
return c.JSONBlob(http.StatusOK, data)
}
func GetOrganizations(c echo.Context) error {
data, err, resp := api.GetRequest(
config.Env.MSHosts.UsersHost+"/organizations",
c.Request().Header, c.Request().URL.RawQuery)
if err != nil {
return c.NoContent(http.StatusBadGateway)
}
return c.Blob(resp.StatusCode, resp.Header.Get("Content-Type"), data)
}