generated from VLADIMIR/template
add permissions route
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"evening_detective_server/internal/modules/processor_jwt"
|
||||
"evening_detective_server/internal/modules/roles"
|
||||
"evening_detective_server/internal/services/ui_service"
|
||||
"evening_detective_server/internal/services/users_service"
|
||||
proto "evening_detective_server/proto"
|
||||
|
||||
@@ -15,13 +16,16 @@ type server struct {
|
||||
proto.UnsafeEveningDetectiveServerServer
|
||||
|
||||
usersService *users_service.UsersService
|
||||
uiService *ui_service.UiService
|
||||
}
|
||||
|
||||
func NewServer(
|
||||
usersService *users_service.UsersService,
|
||||
uiService *ui_service.UiService,
|
||||
) proto.EveningDetectiveServerServer {
|
||||
return &server{
|
||||
usersService: usersService,
|
||||
uiService: uiService,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,3 +156,14 @@ func (s *server) DeleteUserRole(ctx context.Context, req *proto.DeleteUserRoleRe
|
||||
}
|
||||
return &proto.DeleteUserRoleRsp{}, nil
|
||||
}
|
||||
|
||||
func (s *server) GetPermissions(
|
||||
ctx context.Context,
|
||||
req *proto.GetPermissionsReq,
|
||||
) (*proto.GetPermissionsRsp, error) {
|
||||
claims := ctx.Value("claims").(*processor_jwt.JWTClaims)
|
||||
permissions := s.uiService.GetPermissions(claims.Roles)
|
||||
return &proto.GetPermissionsRsp{
|
||||
Permissions: permissions,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
package ui_service
|
||||
|
||||
import (
|
||||
rolesModule "evening_detective_server/internal/modules/roles"
|
||||
"slices"
|
||||
)
|
||||
|
||||
var (
|
||||
permissions = map[string][]string{
|
||||
rolesModule.Admin: {
|
||||
"users_page",
|
||||
},
|
||||
rolesModule.Author: {
|
||||
"scenarios_page",
|
||||
"scenario_editor_page",
|
||||
},
|
||||
rolesModule.Organizer: {
|
||||
"scenarios_page",
|
||||
"games_page",
|
||||
"game_panel_page",
|
||||
},
|
||||
rolesModule.User: {
|
||||
"games_page",
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
type UiService struct{}
|
||||
|
||||
func NewUiService() *UiService {
|
||||
return &UiService{}
|
||||
}
|
||||
|
||||
func (s *UiService) GetPermissions(roles []string) []string {
|
||||
resMap := s.getPermissionsMap(roles)
|
||||
res := make([]string, 0, len(resMap))
|
||||
for permission := range resMap {
|
||||
res = append(res, permission)
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
func (s *UiService) getPermissionsMap(roles []string) map[string]any {
|
||||
resMap := make(map[string]any, 100)
|
||||
|
||||
if slices.Contains(roles, rolesModule.Admin) {
|
||||
for _, permissionsList := range permissions {
|
||||
for _, permission := range permissionsList {
|
||||
resMap[permission] = struct{}{}
|
||||
}
|
||||
}
|
||||
return resMap
|
||||
}
|
||||
|
||||
for _, role := range roles {
|
||||
for _, permission := range permissions[role] {
|
||||
resMap[permission] = struct{}{}
|
||||
}
|
||||
}
|
||||
return resMap
|
||||
}
|
||||
Reference in New Issue
Block a user