-
Notifications
You must be signed in to change notification settings - Fork 0
/
permission.go
124 lines (113 loc) · 4.02 KB
/
permission.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package grpcserver
import (
"context"
"github.com/n-creativesystem/rbns/domain/model"
"github.com/n-creativesystem/rbns/protobuf"
"github.com/n-creativesystem/rbns/protoconv"
"github.com/n-creativesystem/rbns/service"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/types/known/emptypb"
)
type permissionServer struct {
*protobuf.UnimplementedPermissionServer
svc service.PermissionService
}
var _ protobuf.PermissionServer = (*permissionServer)(nil)
func newPermissionServer(srv service.PermissionService) protobuf.PermissionServer {
return &permissionServer{svc: srv}
}
// Permission
func (s *permissionServer) Create(ctx context.Context, in *protobuf.PermissionEntities) (*protobuf.PermissionEntities, error) {
inPermissions := make([]*protobuf.PermissionEntity, len(in.GetPermissions()))
copy(inPermissions, in.GetPermissions())
if len(inPermissions) == 0 {
return &protobuf.PermissionEntities{
Permissions: make([]*protobuf.PermissionEntity, 0),
}, nil
}
names := make([]string, len(inPermissions))
descriptions := make([]string, len(inPermissions))
for idx, permission := range inPermissions {
names[idx] = permission.Name
descriptions[idx] = permission.Description
}
permissions, err := s.svc.Create(ctx, names, descriptions)
if err != nil {
if err == model.ErrNoData {
return nil, status.Error(codes.NotFound, err.Error())
}
return nil, status.Error(codes.Internal, err.Error())
}
out := &protobuf.PermissionEntities{
Permissions: make([]*protobuf.PermissionEntity, len(permissions)),
}
for idx, permission := range permissions {
out.Permissions[idx] = protoconv.NewPermissionEntityByModel(permission)
}
return out, err
}
func (s *permissionServer) FindById(ctx context.Context, in *protobuf.PermissionKey) (*protobuf.PermissionEntity, error) {
permission, err := s.svc.FindById(ctx, in.GetId())
if err != nil {
if err == model.ErrNoData {
return nil, status.Error(codes.NotFound, err.Error())
}
return nil, status.Error(codes.Internal, err.Error())
}
return protoconv.NewPermissionEntityByModel(*permission), nil
}
func (s *permissionServer) FindAll(ctx context.Context, in *emptypb.Empty) (*protobuf.PermissionEntities, error) {
permissions, err := s.svc.FindAll(ctx)
if err != nil {
if err == model.ErrNoData {
return nil, status.Error(codes.NotFound, err.Error())
}
return nil, status.Error(codes.Internal, err.Error())
}
out := &protobuf.PermissionEntities{
Permissions: make([]*protobuf.PermissionEntity, len(permissions)),
}
for idx, permission := range permissions {
out.Permissions[idx] = protoconv.NewPermissionEntityByModel(permission)
}
return out, nil
}
func (s *permissionServer) Update(ctx context.Context, in *protobuf.PermissionEntity) (*emptypb.Empty, error) {
err := s.svc.Update(ctx, in.GetId(), in.GetName(), in.GetDescription())
if err != nil {
if err == model.ErrNoData {
return &emptypb.Empty{}, status.Error(codes.NotFound, err.Error())
}
return &emptypb.Empty{}, status.Error(codes.Internal, err.Error())
}
return &emptypb.Empty{}, nil
}
func (s *permissionServer) Delete(ctx context.Context, in *protobuf.PermissionKey) (*emptypb.Empty, error) {
err := s.svc.Delete(ctx, in.GetId())
if err != nil {
if err == model.ErrNoData {
return &emptypb.Empty{}, status.Error(codes.NotFound, err.Error())
}
return &emptypb.Empty{}, status.Error(codes.Internal, err.Error())
}
return &emptypb.Empty{}, nil
}
func (s *permissionServer) Check(ctx context.Context, in *protobuf.PermissionCheckRequest) (*protobuf.PermissionCheckResult, error) {
result := &protobuf.PermissionCheckResult{
Result: false,
Message: "",
}
res, err := s.svc.Check(ctx, in.GetUserKey(), in.GetOrganizationName(), in.GetPermissionNames()...)
if err != nil {
if err == model.ErrNoData {
return nil, status.Error(codes.NotFound, err.Error())
}
result.Result = false
result.Message = err.Error()
return result, status.Error(codes.Internal, err.Error())
}
result.Message = res.GetMsg()
result.Result = res.IsOk()
return result, nil
}