feat: fixing user role and user refreshToken
This commit is contained in:
parent
940773ae35
commit
d8c994d958
|
|
@ -4,7 +4,7 @@ import "time"
|
|||
|
||||
type UserRoleAccesses struct {
|
||||
ID uint `json:"id" gorm:"primaryKey;type:int4;autoIncrement"`
|
||||
UserRoleId int `json:"user_role_id" gorm:"type:int4"`
|
||||
UserRoleId uint `json:"user_role_id" gorm:"type:int4"`
|
||||
MenuId int `json:"menu_id" gorm:"type:int4"`
|
||||
IsViewEnabled bool `json:"is_view_enabled" gorm:"type:bool"`
|
||||
IsInsertEnabled bool `json:"is_insert_enabled" gorm:"type:bool"`
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package controller
|
|||
|
||||
import (
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/rs/zerolog"
|
||||
"go-humas-be/app/module/ppid_datas/request"
|
||||
"go-humas-be/app/module/ppid_datas/service"
|
||||
"go-humas-be/utils/paginator"
|
||||
|
|
@ -14,6 +15,7 @@ import (
|
|||
|
||||
type ppidDatasController struct {
|
||||
ppidDatasService service.PpidDatasService
|
||||
log zerolog.Logger
|
||||
}
|
||||
|
||||
type PpidDatasController interface {
|
||||
|
|
@ -66,7 +68,7 @@ func (_i *ppidDatasController) All(c *fiber.Ctx) error {
|
|||
req := reqContext.ToParamRequest()
|
||||
req.Pagination = paginate
|
||||
|
||||
ppidDatasData, paging, err := _i.ppidDatasService.All(req, authToken)
|
||||
ppidDatasData, paging, err := _i.ppidDatasService.All(req, &authToken)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ type ppidDatasService struct {
|
|||
|
||||
// PpidDatasService define interface of IPpidDatasService
|
||||
type PpidDatasService interface {
|
||||
All(req request.PpidDatasQueryRequest, authToken string) (ppidDatas []*response.PpidDatasResponse, paging paginator.Pagination, err error)
|
||||
All(req request.PpidDatasQueryRequest, authToken *string) (ppidDatas []*response.PpidDatasResponse, paging paginator.Pagination, err error)
|
||||
Show(id string) (ppidDatas *response.PpidDatasResponse, err error)
|
||||
Save(req request.PpidDatasCreateRequest, authToken string) (ppidDatas *entity.PpidDatas, err error)
|
||||
Update(id uint, req request.PpidDatasUpdateRequest) (err error)
|
||||
|
|
@ -64,13 +64,15 @@ func NewPpidDatasService(
|
|||
}
|
||||
|
||||
// All implement interface of PpidDatasService
|
||||
func (_i *ppidDatasService) All(req request.PpidDatasQueryRequest, authToken string) (ppidDatass []*response.PpidDatasResponse, paging paginator.Pagination, err error) {
|
||||
|
||||
user := utilSvc.GetUserInfo(_i.Log, _i.UsersRepo, authToken)
|
||||
req.UserId = &user.ID
|
||||
req.UserRoleId = &user.UserRoleId
|
||||
req.UserLevelId = &user.UserLevelId
|
||||
func (_i *ppidDatasService) All(req request.PpidDatasQueryRequest, authToken *string) (ppidDatass []*response.PpidDatasResponse, paging paginator.Pagination, err error) {
|
||||
|
||||
var user *entity.Users
|
||||
if authToken != nil && *authToken != "" {
|
||||
user = utilSvc.GetUserInfo(_i.Log, _i.UsersRepo, *authToken)
|
||||
req.UserId = &user.ID
|
||||
req.UserRoleId = &user.UserRoleId
|
||||
req.UserLevelId = &user.UserLevelId
|
||||
}
|
||||
results, paging, err := _i.Repo.GetAll(req)
|
||||
if err != nil {
|
||||
return
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ type UserRoleAccessesRepository interface {
|
|||
GetAll(req request.UserRoleAccessesQueryRequest) (userRoleAccessess []*entity.UserRoleAccesses, paging paginator.Pagination, err error)
|
||||
FindOne(id uint) (userRoleAccesses *entity.UserRoleAccesses, err error)
|
||||
Create(userRoleAccesses *entity.UserRoleAccesses) (err error)
|
||||
CreateAll(userRoleAccesses *[]entity.UserRoleAccesses) (err error)
|
||||
Update(id uint, userRoleAccesses *entity.UserRoleAccesses) (err error)
|
||||
Delete(id uint) (err error)
|
||||
}
|
||||
|
|
@ -66,6 +67,10 @@ func (_i *userRoleAccessesRepository) Create(userRoleAccesses *entity.UserRoleAc
|
|||
return _i.DB.DB.Create(userRoleAccesses).Error
|
||||
}
|
||||
|
||||
func (_i *userRoleAccessesRepository) CreateAll(userRoleAccesses *[]entity.UserRoleAccesses) (err error) {
|
||||
return _i.DB.DB.Create(userRoleAccesses).Error
|
||||
}
|
||||
|
||||
func (_i *userRoleAccessesRepository) Update(id uint, userRoleAccesses *entity.UserRoleAccesses) (err error) {
|
||||
return _i.DB.DB.Model(&entity.UserRoleAccesses{}).
|
||||
Where(&entity.UserRoleAccesses{ID: id}).
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ type UserRoleAccessesQueryRequest struct {
|
|||
}
|
||||
|
||||
type UserRoleAccessesCreateRequest struct {
|
||||
UserRoleId int `json:"userRoleId" validate:"required"`
|
||||
MenuId int `json:"menuId" validate:"required"`
|
||||
IsViewEnabled bool `json:"isViewEnabled" validate:"required"`
|
||||
IsInsertEnabled bool `json:"isInsertEnabled" validate:"required"`
|
||||
|
|
@ -31,7 +30,6 @@ type UserRoleAccessesCreateRequest struct {
|
|||
|
||||
func (req UserRoleAccessesCreateRequest) ToEntity() *entity.UserRoleAccesses {
|
||||
return &entity.UserRoleAccesses{
|
||||
UserRoleId: req.UserRoleId,
|
||||
MenuId: req.MenuId,
|
||||
IsViewEnabled: req.IsViewEnabled,
|
||||
IsInsertEnabled: req.IsInsertEnabled,
|
||||
|
|
@ -44,7 +42,7 @@ func (req UserRoleAccessesCreateRequest) ToEntity() *entity.UserRoleAccesses {
|
|||
|
||||
type UserRoleAccessesUpdateRequest struct {
|
||||
ID uint `json:"id" validate:"required"`
|
||||
UserRoleId int `json:"user_role_id" validate:"required"`
|
||||
UserRoleId uint `json:"user_role_id" validate:"required"`
|
||||
MenuId int `json:"menu_id" validate:"required"`
|
||||
IsViewEnabled bool `json:"is_view_enabled" validate:"required"`
|
||||
IsInsertEnabled bool `json:"is_insert_enabled" validate:"required"`
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import "time"
|
|||
|
||||
type UserRoleAccessesResponse struct {
|
||||
ID uint `json:"id"`
|
||||
UserRoleId int `json:"user_role_id"`
|
||||
UserRoleId uint `json:"user_role_id"`
|
||||
MenuId int `json:"menu_id"`
|
||||
IsViewEnabled bool `json:"is_view_enabled"`
|
||||
IsInsertEnabled bool `json:"is_insert_enabled"`
|
||||
|
|
|
|||
|
|
@ -17,9 +17,9 @@ type userRolesRepository struct {
|
|||
|
||||
// UserRolesRepository define interface of IUserRolesRepository
|
||||
type UserRolesRepository interface {
|
||||
GetAll(req request.UserRolesQueryRequest) (userRoless []*entity.UserRoles, paging paginator.Pagination, err error)
|
||||
GetAll(req request.UserRolesQueryRequest) (userRoles []*entity.UserRoles, paging paginator.Pagination, err error)
|
||||
FindOne(id uint) (userRoles *entity.UserRoles, err error)
|
||||
Create(userRoles *entity.UserRoles) (err error)
|
||||
Create(userRoles *entity.UserRoles) (userRolesReturn *entity.UserRoles, err error)
|
||||
Update(id uint, userRoles *entity.UserRoles) (err error)
|
||||
Delete(id uint) (err error)
|
||||
}
|
||||
|
|
@ -32,7 +32,7 @@ func NewUserRolesRepository(db *database.Database, log zerolog.Logger) UserRoles
|
|||
}
|
||||
|
||||
// implement interface of IUserRolesRepository
|
||||
func (_i *userRolesRepository) GetAll(req request.UserRolesQueryRequest) (userRoless []*entity.UserRoles, paging paginator.Pagination, err error) {
|
||||
func (_i *userRolesRepository) GetAll(req request.UserRolesQueryRequest) (userRoles []*entity.UserRoles, paging paginator.Pagination, err error) {
|
||||
_i.Log.Info().Interface("data", req).Msg("")
|
||||
|
||||
var count int64
|
||||
|
|
@ -66,7 +66,7 @@ func (_i *userRolesRepository) GetAll(req request.UserRolesQueryRequest) (userRo
|
|||
req.Pagination.Count = count
|
||||
req.Pagination = paginator.Paging(req.Pagination)
|
||||
|
||||
err = query.Offset(req.Pagination.Offset).Limit(req.Pagination.Limit).Find(&userRoless).Error
|
||||
err = query.Offset(req.Pagination.Offset).Limit(req.Pagination.Limit).Find(&userRoles).Error
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
|
@ -84,8 +84,9 @@ func (_i *userRolesRepository) FindOne(id uint) (userRoles *entity.UserRoles, er
|
|||
return userRoles, nil
|
||||
}
|
||||
|
||||
func (_i *userRolesRepository) Create(userRoles *entity.UserRoles) (err error) {
|
||||
return _i.DB.DB.Create(userRoles).Error
|
||||
func (_i *userRolesRepository) Create(userRoles *entity.UserRoles) (userRolesReturn *entity.UserRoles, err error) {
|
||||
result := _i.DB.DB.Create(userRoles)
|
||||
return userRoles, result.Error
|
||||
}
|
||||
|
||||
func (_i *userRolesRepository) Update(id uint, userRoles *entity.UserRoles) (err error) {
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package request
|
|||
|
||||
import (
|
||||
"go-humas-be/app/database/entity"
|
||||
userRoleAccessReq "go-humas-be/app/module/user_role_accesses/request"
|
||||
"go-humas-be/utils/paginator"
|
||||
"strconv"
|
||||
"time"
|
||||
|
|
@ -21,11 +22,12 @@ type UserRolesQueryRequest struct {
|
|||
}
|
||||
|
||||
type UserRolesCreateRequest struct {
|
||||
Name string `json:"name" validate:"required"`
|
||||
Description string `json:"description" validate:"required"`
|
||||
Code string `json:"code" validate:"required"`
|
||||
UserLevelId uint `json:"userLevelId" validate:"required"`
|
||||
StatusId int `json:"statusId" validate:"required"`
|
||||
Name string `json:"name" validate:"required"`
|
||||
Description string `json:"description" validate:"required"`
|
||||
Code string `json:"code" validate:"required"`
|
||||
UserLevelId uint `json:"userLevelId" validate:"required"`
|
||||
UserRoleAccess []userRoleAccessReq.UserRoleAccessesCreateRequest `json:"userRoleAccess" validate:"required"`
|
||||
StatusId int `json:"statusId" validate:"required"`
|
||||
}
|
||||
|
||||
func (req UserRolesCreateRequest) ToEntity() *entity.UserRoles {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,9 @@ package service
|
|||
|
||||
import (
|
||||
"github.com/rs/zerolog"
|
||||
"go-humas-be/app/database/entity"
|
||||
userLevelsRepository "go-humas-be/app/module/user_levels/repository"
|
||||
userRoleAccessRepository "go-humas-be/app/module/user_role_accesses/repository"
|
||||
userRoleLevelDetailsRepository "go-humas-be/app/module/user_role_level_details/repository"
|
||||
"go-humas-be/app/module/user_roles/mapper"
|
||||
"go-humas-be/app/module/user_roles/repository"
|
||||
|
|
@ -19,6 +21,7 @@ type userRolesService struct {
|
|||
UsersRepo usersRepository.UsersRepository
|
||||
UserLevelsRepo userLevelsRepository.UserLevelsRepository
|
||||
UserRoleLevelDetailsRepo userRoleLevelDetailsRepository.UserRoleLevelDetailsRepository
|
||||
UserRoleAccessRepo userRoleAccessRepository.UserRoleAccessesRepository
|
||||
Log zerolog.Logger
|
||||
}
|
||||
|
||||
|
|
@ -37,6 +40,7 @@ func NewUserRolesService(
|
|||
usersRepo usersRepository.UsersRepository,
|
||||
userLevelsRepo userLevelsRepository.UserLevelsRepository,
|
||||
userRoleLevelDetailsRepo userRoleLevelDetailsRepository.UserRoleLevelDetailsRepository,
|
||||
userRoleAccessRepo userRoleAccessRepository.UserRoleAccessesRepository,
|
||||
log zerolog.Logger,
|
||||
) UserRolesService {
|
||||
|
||||
|
|
@ -45,6 +49,7 @@ func NewUserRolesService(
|
|||
UsersRepo: usersRepo,
|
||||
UserLevelsRepo: userLevelsRepo,
|
||||
UserRoleLevelDetailsRepo: userRoleLevelDetailsRepo,
|
||||
UserRoleAccessRepo: userRoleAccessRepo,
|
||||
Log: log,
|
||||
}
|
||||
}
|
||||
|
|
@ -80,7 +85,29 @@ func (_i *userRolesService) Save(req request.UserRolesCreateRequest, authToken s
|
|||
createdBy := utilSvc.GetUserInfo(_i.Log, _i.UsersRepo, authToken)
|
||||
newReq.CreatedById = &createdBy.ID
|
||||
|
||||
return _i.Repo.Create(newReq)
|
||||
userRolesReturn, err := _i.Repo.Create(newReq)
|
||||
if err == nil {
|
||||
var userRoleAccessList []entity.UserRoleAccesses
|
||||
for _, item := range req.UserRoleAccess {
|
||||
userRoleAccess := entity.UserRoleAccesses{
|
||||
UserRoleId: userRolesReturn.ID,
|
||||
MenuId: item.MenuId,
|
||||
IsViewEnabled: item.IsViewEnabled,
|
||||
IsInsertEnabled: item.IsInsertEnabled,
|
||||
IsUpdateEnabled: item.IsUpdateEnabled,
|
||||
IsDeleteEnabled: item.IsDeleteEnabled,
|
||||
IsApprovalEnabled: item.IsApprovalEnabled,
|
||||
IsAdminEnabled: item.IsAdminEnabled,
|
||||
}
|
||||
userRoleAccessList = append(userRoleAccessList, userRoleAccess)
|
||||
}
|
||||
err := _i.UserRoleAccessRepo.CreateAll(&userRoleAccessList)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (_i *userRolesService) Update(id uint, req request.UserRolesUpdateRequest) (err error) {
|
||||
|
|
|
|||
|
|
@ -95,8 +95,9 @@ func (req UsersUpdateRequest) ToEntity() *entity.Users {
|
|||
}
|
||||
|
||||
type UserLogin struct {
|
||||
Username string `json:"username" validate:"required,lowercase"`
|
||||
Password string `json:"password" validate:"required"`
|
||||
Username *string `json:"username"`
|
||||
Password *string `json:"password"`
|
||||
RefreshToken *string `json:"refreshToken"`
|
||||
}
|
||||
|
||||
type UsersQueryRequestContext struct {
|
||||
|
|
|
|||
|
|
@ -82,7 +82,12 @@ func (_i *usersService) Save(req request.UsersCreateRequest, authToken string) (
|
|||
func (_i *usersService) Login(req request.UserLogin) (res *gocloak.JWT, err error) {
|
||||
_i.Log.Info().Interface("data", req).Msg("")
|
||||
|
||||
loginResponse, err := _i.Keycloak.Login(req.Username, req.Password)
|
||||
var loginResponse *gocloak.JWT
|
||||
if req.RefreshToken == nil {
|
||||
loginResponse, err = _i.Keycloak.Login(*req.Username, *req.Password)
|
||||
} else {
|
||||
loginResponse, err = _i.Keycloak.RefreshToken(*req.RefreshToken)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,6 +37,23 @@ func (_keycloak *KeycloakConfig) Login(username string, password string) (*goclo
|
|||
return loginResponse, nil
|
||||
}
|
||||
|
||||
func (_keycloak *KeycloakConfig) RefreshToken(refreshToken string) (*gocloak.JWT, error) {
|
||||
ctx := context.Background()
|
||||
client := gocloak.NewClient(_keycloak.Cfg.Keycloak.Endpoint)
|
||||
loginResponse, err := client.RefreshToken(
|
||||
ctx,
|
||||
refreshToken,
|
||||
_keycloak.Cfg.Keycloak.ClientId,
|
||||
_keycloak.Cfg.Keycloak.ClientSecret,
|
||||
_keycloak.Cfg.Keycloak.Realm,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, errors.New("Invalid User Credentials")
|
||||
}
|
||||
|
||||
return loginResponse, nil
|
||||
}
|
||||
|
||||
func (_keycloak *KeycloakConfig) CreateUser(fullname string, email string, username string, password string) (string, error) {
|
||||
ctx := context.Background()
|
||||
client := gocloak.NewClient(_keycloak.Cfg.Keycloak.Endpoint)
|
||||
|
|
|
|||
|
|
@ -7154,14 +7154,13 @@ const docTemplate = `{
|
|||
},
|
||||
"request.UserLogin": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"password",
|
||||
"username"
|
||||
],
|
||||
"properties": {
|
||||
"password": {
|
||||
"type": "string"
|
||||
},
|
||||
"refreshToken": {
|
||||
"type": "string"
|
||||
},
|
||||
"username": {
|
||||
"type": "string"
|
||||
}
|
||||
|
|
@ -7176,8 +7175,7 @@ const docTemplate = `{
|
|||
"isInsertEnabled",
|
||||
"isUpdateEnabled",
|
||||
"isViewEnabled",
|
||||
"menuId",
|
||||
"userRoleId"
|
||||
"menuId"
|
||||
],
|
||||
"properties": {
|
||||
"isAdminEnabled": {
|
||||
|
|
@ -7200,9 +7198,6 @@ const docTemplate = `{
|
|||
},
|
||||
"menuId": {
|
||||
"type": "integer"
|
||||
},
|
||||
"userRoleId": {
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -7256,7 +7251,8 @@ const docTemplate = `{
|
|||
"description",
|
||||
"name",
|
||||
"statusId",
|
||||
"userLevelId"
|
||||
"userLevelId",
|
||||
"userRoleAccess"
|
||||
],
|
||||
"properties": {
|
||||
"code": {
|
||||
|
|
@ -7273,6 +7269,12 @@ const docTemplate = `{
|
|||
},
|
||||
"userLevelId": {
|
||||
"type": "integer"
|
||||
},
|
||||
"userRoleAccess": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/request.UserRoleAccessesCreateRequest"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -7143,14 +7143,13 @@
|
|||
},
|
||||
"request.UserLogin": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"password",
|
||||
"username"
|
||||
],
|
||||
"properties": {
|
||||
"password": {
|
||||
"type": "string"
|
||||
},
|
||||
"refreshToken": {
|
||||
"type": "string"
|
||||
},
|
||||
"username": {
|
||||
"type": "string"
|
||||
}
|
||||
|
|
@ -7165,8 +7164,7 @@
|
|||
"isInsertEnabled",
|
||||
"isUpdateEnabled",
|
||||
"isViewEnabled",
|
||||
"menuId",
|
||||
"userRoleId"
|
||||
"menuId"
|
||||
],
|
||||
"properties": {
|
||||
"isAdminEnabled": {
|
||||
|
|
@ -7189,9 +7187,6 @@
|
|||
},
|
||||
"menuId": {
|
||||
"type": "integer"
|
||||
},
|
||||
"userRoleId": {
|
||||
"type": "integer"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -7245,7 +7240,8 @@
|
|||
"description",
|
||||
"name",
|
||||
"statusId",
|
||||
"userLevelId"
|
||||
"userLevelId",
|
||||
"userRoleAccess"
|
||||
],
|
||||
"properties": {
|
||||
"code": {
|
||||
|
|
@ -7262,6 +7258,12 @@
|
|||
},
|
||||
"userLevelId": {
|
||||
"type": "integer"
|
||||
},
|
||||
"userRoleAccess": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/request.UserRoleAccessesCreateRequest"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -362,11 +362,10 @@ definitions:
|
|||
properties:
|
||||
password:
|
||||
type: string
|
||||
refreshToken:
|
||||
type: string
|
||||
username:
|
||||
type: string
|
||||
required:
|
||||
- password
|
||||
- username
|
||||
type: object
|
||||
request.UserRoleAccessesCreateRequest:
|
||||
properties:
|
||||
|
|
@ -384,8 +383,6 @@ definitions:
|
|||
type: boolean
|
||||
menuId:
|
||||
type: integer
|
||||
userRoleId:
|
||||
type: integer
|
||||
required:
|
||||
- isAdminEnabled
|
||||
- isApprovalEnabled
|
||||
|
|
@ -394,7 +391,6 @@ definitions:
|
|||
- isUpdateEnabled
|
||||
- isViewEnabled
|
||||
- menuId
|
||||
- userRoleId
|
||||
type: object
|
||||
request.UserRoleAccessesUpdateRequest:
|
||||
properties:
|
||||
|
|
@ -439,12 +435,17 @@ definitions:
|
|||
type: integer
|
||||
userLevelId:
|
||||
type: integer
|
||||
userRoleAccess:
|
||||
items:
|
||||
$ref: '#/definitions/request.UserRoleAccessesCreateRequest'
|
||||
type: array
|
||||
required:
|
||||
- code
|
||||
- description
|
||||
- name
|
||||
- statusId
|
||||
- userLevelId
|
||||
- userRoleAccess
|
||||
type: object
|
||||
request.UserRolesUpdateRequest:
|
||||
properties:
|
||||
|
|
|
|||
Loading…
Reference in New Issue