diff --git a/controllers/users_controller.go b/controllers/users_controller.go index 6173082..6dbfb58 100644 --- a/controllers/users_controller.go +++ b/controllers/users_controller.go @@ -130,7 +130,12 @@ func Login(c *gin.Context) { if usr.CheckPassword(user.Password, req.Password) { if user.IsActive && user.LoginAttempts < 10 { // Proceed with creating JWT token and resetting login attempts - token, err := usr.CreateSessionToken(user.ID, user.CompanyID) + if len(user.Companies) == 0 { + c.JSON(http.StatusInternalServerError, gin.H{"error": "User is not connected to a company"}) + return + } + + token, err := usr.CreateSessionToken(user.ID, user.Companies[0].ID) if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": "Could not create JWT token"}) return diff --git a/main.go b/main.go index 4bc82a0..c031061 100644 --- a/main.go +++ b/main.go @@ -44,7 +44,7 @@ func main() { Admin.AddResource(&models.User{}) Admin.AddResource(&models.Device{}) Admin.AddResource(&models.ProductTemplate{}) - company.Meta(&admin.Meta{Name: "Users", Config: &admin.SelectManyConfig{SelectMode: "select"}}) + company.Meta(&admin.Meta{Name: "Users", Config: &admin.SelectManyConfig{SelectMode: "bottom_sheet"}}) company.Meta(&admin.Meta{Name: "Devices", Config: &admin.SelectManyConfig{SelectMode: "bottom_sheet"}}) // // Initialize HTTP request multiplexe mux := http.NewServeMux() diff --git a/models/company.go b/models/company.go index c26435f..cc07a7c 100644 --- a/models/company.go +++ b/models/company.go @@ -18,7 +18,7 @@ type Company struct { Address string `json:"address"` Email string `json:"email"` Phone string `json:"phone"` - Users []User `json:"users"` + Users []User `gorm:"many2many:user_companies;"` Devices []Device `json:"devices"` } diff --git a/models/session_token.go b/models/session_token.go index e778f4e..082668a 100644 --- a/models/session_token.go +++ b/models/session_token.go @@ -5,7 +5,7 @@ type SessionToken struct { UserID uint `json:"userId"` Token string `json:"token"` IsActive bool `json:"isActive"` - CompanyID uint `json:"userId"` + CompanyID uint `json:"companyID"` } func (SessionToken) Update() (bool, error) { diff --git a/models/user.go b/models/user.go index 4ec2797..f59e322 100644 --- a/models/user.go +++ b/models/user.go @@ -2,13 +2,15 @@ package models type User struct { BaseModel - Username string `json:"username"` - Password string `json:"password"` - Email string `json:"email"` - Avatar string `json:"avatar"` - IsActive bool `json:"isActive" gorm:"default:false"` - CompanyID uint `json:"companyId"` - LoginAttempts int `gorm:"default:0"` + Username string `json:"username"` + Password string `json:"password"` + Email string `json:"email"` + Avatar string `json:"avatar"` + IsActive bool `json:"isActive" gorm:"default:false"` + // CompanyID uint `json:"companyId"` + // Company Company + Companies []Company `gorm:"many2many:user_companies;"` + LoginAttempts int `gorm:"default:0"` } type ResetPasswordRequest struct {