Skip to content

Commit

Permalink
refactor: Update role repository to assign and remove roles from users
Browse files Browse the repository at this point in the history
  • Loading branch information
doziestar committed Jul 2, 2024
1 parent e6df945 commit 3535852
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 4 deletions.
16 changes: 12 additions & 4 deletions internal/auth/internal/authz/service/authz_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package service

import (
"context"
"strconv"

"auth/ent"
"auth/internal/repository"
Expand Down Expand Up @@ -82,7 +83,9 @@ func (s *AuthzService) CreateRole(ctx context.Context, req *pb.CreateRoleRequest
role.Permissions[i] = perm.Resource + ":" + perm.Action
}

if err := s.roleRepo.Create(ctx, role); err != nil {
var err error

if role, err = s.roleRepo.Create(ctx, role); err != nil {
return nil, status.Errorf(codes.Internal, "Failed to create role: %v", err)
}

Expand Down Expand Up @@ -111,7 +114,7 @@ func (s *AuthzService) UpdateRole(ctx context.Context, req *pb.UpdateRoleRequest
}
}

if err := s.roleRepo.Update(ctx, role); err != nil {
if role, err = s.roleRepo.Update(ctx, role); err != nil {
return nil, status.Errorf(codes.Internal, "Failed to update role: %v", err)
}

Expand Down Expand Up @@ -149,7 +152,12 @@ func (s *AuthzService) GetRole(ctx context.Context, req *pb.GetRoleRequest) (*pb
}

func (s *AuthzService) ListRoles(ctx context.Context, req *pb.ListRolesRequest) (*pb.ListRolesResponse, error) {
roles, nextPageToken, err := s.roleRepo.List(ctx, int(req.PageSize), req.PageToken)
nextPageToken, err := strconv.Atoi(req.PageToken)
if err != nil {
return nil, status.Errorf(codes.InvalidArgument, "Invalid page token: %v", err)
}
nextPageToken += int(req.PageSize)
roles, err := s.roleRepo.List(ctx, int(req.PageSize), nextPageToken)
if err != nil {
return nil, status.Errorf(codes.Internal, "Failed to list roles: %v", err)
}
Expand All @@ -165,7 +173,7 @@ func (s *AuthzService) ListRoles(ctx context.Context, req *pb.ListRolesRequest)

return &pb.ListRolesResponse{
Roles: pbRoles,
NextPageToken: nextPageToken,
NextPageToken: strconv.Itoa(nextPageToken),
}, nil
}

Expand Down
19 changes: 19 additions & 0 deletions internal/auth/internal/repository/role.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"time"

"auth/ent/role"
"auth/ent/user"
)

type RoleRepository struct {
Expand Down Expand Up @@ -116,6 +117,24 @@ func (r *RoleRepository) Search(ctx context.Context, query string) ([]*ent.Role,
All(ctx)
}

func (r *RoleRepository) GetRolesByUserID(ctx context.Context, userID string) ([]*ent.Role, error) {
return r.client.Role.Query().
Where(role.HasUsersWith(user.ID(userID))).
All(ctx)
}

func (r *RoleRepository) AssignRoleToUser(ctx context.Context, userID, roleID string) error {
return r.client.User.UpdateOneID(userID).
AddRoleIDs(roleID).
Exec(ctx)
}

func (r *RoleRepository) RemoveRoleFromUser(ctx context.Context, userID, roleID string) error {
return r.client.User.UpdateOneID(userID).
RemoveRoleIDs(roleID).
Exec(ctx)
}

// func (r *RoleRepository) GetRolesByPermission(ctx context.Context, permission string) ([]*ent.Role, error) {
// return r.client.Role.Query().
// Where(role.HasPermissionsWith(permission)).
Expand Down

0 comments on commit 3535852

Please sign in to comment.