Skip to content

Commit 8d7fda9

Browse files
ali-shokoohiAli Shokoohi
andauthored
feat: add enforcer EnableAcceptJsonRequest feature (#119)
Version of the "Casbin" module upgraded to 2.100 to access the "bleAcceptJsonRequest" feature then integrated this project with the new version of the "Casbin" then added new requested feature. Changes: - Upgraded the version of the "Casbin" module - Integrated with the new version of the "Casbin" module - Changed the .proto file to add "EnableAcceptJsonRequest" field at calling NewEnforcer - Generated Go files from new changed the .proto file - Added "EnableAcceptJsonRequest" field to each "NewEncoder" test cases Co-authored-by: Ali Shokoohi <shokoohi.pub@gmail.com>
1 parent 8d65648 commit 8d7fda9

10 files changed

Lines changed: 391 additions & 322 deletions

File tree

go.mod

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/casbin/casbin-server
33
go 1.19
44

55
require (
6-
github.com/casbin/casbin/v2 v2.71.1
6+
github.com/casbin/casbin/v2 v2.100.0
77
github.com/casbin/gorm-adapter/v3 v3.14.0
88
github.com/casbin/mongodb-adapter/v3 v3.7.0
99
github.com/stretchr/testify v1.8.0
@@ -13,6 +13,8 @@ require (
1313

1414
require (
1515
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible // indirect
16+
github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect
17+
github.com/casbin/govaluate v1.2.0 // indirect
1618
github.com/davecgh/go-spew v1.1.1 // indirect
1719
github.com/glebarez/go-sqlite v1.19.1 // indirect
1820
github.com/glebarez/sqlite v1.5.0 // indirect

go.sum

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,17 @@ github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go
1010
github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc=
1111
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
1212
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
13+
github.com/bmatcuk/doublestar/v4 v4.6.1 h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwNy7PA4I=
14+
github.com/bmatcuk/doublestar/v4 v4.6.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
1315
github.com/casbin/casbin/v2 v2.55.1/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg=
1416
github.com/casbin/casbin/v2 v2.71.1 h1:LRHyqM0S1LzM/K59PmfUIN0ZJfLgcOjL4OhOQI/FNXU=
1517
github.com/casbin/casbin/v2 v2.71.1/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg=
18+
github.com/casbin/casbin/v2 v2.100.0 h1:aeugSNjjHfCrgA22nHkVvw2xsscboHv5r0a13ljQKGQ=
19+
github.com/casbin/casbin/v2 v2.100.0/go.mod h1:LO7YPez4dX3LgoTCqSQAleQDo0S0BeZBDxYnPUl95Ng=
1620
github.com/casbin/gorm-adapter/v3 v3.14.0 h1:zZ6AIiNHJZ3ntdf5RBrqD+0Cb4UO+uKFk79R9yJ7mpw=
1721
github.com/casbin/gorm-adapter/v3 v3.14.0/go.mod h1:jqaf4bUITbCyMPUellaTd8IQJ77JfVAbe77gZZnx98w=
22+
github.com/casbin/govaluate v1.2.0 h1:wXCXFmqyY+1RwiKfYo3jMKyrtZmOL3kHwaqDyCPOYak=
23+
github.com/casbin/govaluate v1.2.0/go.mod h1:G/UnbIjZk/0uMNaLwZZmFQrR72tYRZWQkO70si/iR7A=
1824
github.com/casbin/mongodb-adapter/v3 v3.7.0 h1:w9c3bea1BGK4eZTAmk17JkY52yv/xSZDSHKji8q+z6E=
1925
github.com/casbin/mongodb-adapter/v3 v3.7.0/go.mod h1:F1mu4ojoJVE/8VhIMxMedhjfwRDdIXgANYs6Sd0MgVA=
2026
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=

proto/casbin.pb.go

Lines changed: 301 additions & 290 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

proto/casbin.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ service Casbin {
9393
message NewEnforcerRequest {
9494
string modelText = 1;
9595
int32 adapterHandle = 2;
96+
bool enableAcceptJsonRequest = 3;
9697
}
9798

9899
message NewEnforcerReply {

proto/casbin_grpc.pb.go

Lines changed: 2 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/enforcer.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,9 @@ func (s *Server) NewEnforcer(ctx context.Context, in *pb.NewEnforcerRequest) (*p
126126
return &pb.NewEnforcerReply{Handler: 0}, err
127127
}
128128
}
129+
130+
e.EnableAcceptJsonRequest(in.EnableAcceptJsonRequest)
131+
129132
h := s.addEnforcer(e)
130133

131134
return &pb.NewEnforcerReply{Handler: int32(h)}, nil

server/management_api.go

Lines changed: 60 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,12 @@ func (s *Server) GetAllNamedSubjects(ctx context.Context, in *pb.SimpleGetReques
4646
return &pb.ArrayReply{}, err
4747
}
4848

49-
return &pb.ArrayReply{Array: e.GetModel().GetValuesForFieldInPolicy("p", in.PType, 0)}, nil
49+
valuesForFieldInPolicy, err := e.GetModel().GetValuesForFieldInPolicy("p", in.PType, 0)
50+
if err != nil {
51+
return &pb.ArrayReply{}, err
52+
}
53+
54+
return &pb.ArrayReply{Array: valuesForFieldInPolicy}, nil
5055
}
5156

5257
// GetAllObjects gets the list of objects that show up in the current policy.
@@ -61,7 +66,12 @@ func (s *Server) GetAllNamedObjects(ctx context.Context, in *pb.SimpleGetRequest
6166
return &pb.ArrayReply{}, err
6267
}
6368

64-
return &pb.ArrayReply{Array: e.GetModel().GetValuesForFieldInPolicy("p", in.PType, 1)}, nil
69+
valuesForFieldInPolicy, err := e.GetModel().GetValuesForFieldInPolicy("p", in.PType, 1)
70+
if err != nil {
71+
return &pb.ArrayReply{}, err
72+
}
73+
74+
return &pb.ArrayReply{Array: valuesForFieldInPolicy}, nil
6575
}
6676

6777
// GetAllActions gets the list of actions that show up in the current policy.
@@ -76,7 +86,12 @@ func (s *Server) GetAllNamedActions(ctx context.Context, in *pb.SimpleGetRequest
7686
return &pb.ArrayReply{}, err
7787
}
7888

79-
return &pb.ArrayReply{Array: e.GetModel().GetValuesForFieldInPolicy("p", in.PType, 2)}, nil
89+
valuesForFieldInPolicy, err := e.GetModel().GetValuesForFieldInPolicy("p", in.PType, 2)
90+
if err != nil {
91+
return &pb.ArrayReply{}, err
92+
}
93+
94+
return &pb.ArrayReply{Array: valuesForFieldInPolicy}, nil
8095
}
8196

8297
// GetAllRoles gets the list of roles that show up in the current policy.
@@ -91,7 +106,12 @@ func (s *Server) GetAllNamedRoles(ctx context.Context, in *pb.SimpleGetRequest)
91106
return &pb.ArrayReply{}, err
92107
}
93108

94-
return &pb.ArrayReply{Array: e.GetModel().GetValuesForFieldInPolicy("g", in.PType, 1)}, nil
109+
valuesForFieldInPolicy, err := e.GetModel().GetValuesForFieldInPolicy("g", in.PType, 1)
110+
if err != nil {
111+
return &pb.ArrayReply{}, err
112+
}
113+
114+
return &pb.ArrayReply{Array: valuesForFieldInPolicy}, nil
95115
}
96116

97117
// GetPolicy gets all the authorization rules in the policy.
@@ -106,7 +126,12 @@ func (s *Server) GetNamedPolicy(ctx context.Context, in *pb.PolicyRequest) (*pb.
106126
return &pb.Array2DReply{}, err
107127
}
108128

109-
return s.wrapPlainPolicy(e.GetModel().GetPolicy("p", in.PType)), nil
129+
policy, err := e.GetModel().GetPolicy("p", in.PType)
130+
if err != nil {
131+
return &pb.Array2DReply{}, err
132+
}
133+
134+
return s.wrapPlainPolicy(policy), nil
110135
}
111136

112137
// GetFilteredPolicy gets all the authorization rules in the policy, field filters can be specified.
@@ -123,7 +148,12 @@ func (s *Server) GetFilteredNamedPolicy(ctx context.Context, in *pb.FilteredPoli
123148
return &pb.Array2DReply{}, err
124149
}
125150

126-
return s.wrapPlainPolicy(e.GetModel().GetFilteredPolicy("p", in.PType, int(in.FieldIndex), in.FieldValues...)), nil
151+
filteredPolicy, err := e.GetModel().GetFilteredPolicy("p", in.PType, int(in.FieldIndex), in.FieldValues...)
152+
if err != nil {
153+
return &pb.Array2DReply{}, err
154+
}
155+
156+
return s.wrapPlainPolicy(filteredPolicy), nil
127157
}
128158

129159
// GetGroupingPolicy gets all the role inheritance rules in the policy.
@@ -138,7 +168,12 @@ func (s *Server) GetNamedGroupingPolicy(ctx context.Context, in *pb.PolicyReques
138168
return &pb.Array2DReply{}, err
139169
}
140170

141-
return s.wrapPlainPolicy(e.GetModel().GetPolicy("g", in.PType)), nil
171+
policy, err := e.GetModel().GetPolicy("g", in.PType)
172+
if err != nil {
173+
return &pb.Array2DReply{}, err
174+
}
175+
176+
return s.wrapPlainPolicy(policy), nil
142177
}
143178

144179
// GetFilteredGroupingPolicy gets all the role inheritance rules in the policy, field filters can be specified.
@@ -155,7 +190,12 @@ func (s *Server) GetFilteredNamedGroupingPolicy(ctx context.Context, in *pb.Filt
155190
return &pb.Array2DReply{}, err
156191
}
157192

158-
return s.wrapPlainPolicy(e.GetModel().GetFilteredPolicy("g", in.PType, int(in.FieldIndex), in.FieldValues...)), nil
193+
filteredPolicy, err := e.GetModel().GetFilteredPolicy("g", in.PType, int(in.FieldIndex), in.FieldValues...)
194+
if err != nil {
195+
return &pb.Array2DReply{}, err
196+
}
197+
198+
return s.wrapPlainPolicy(filteredPolicy), nil
159199
}
160200

161201
// HasPolicy determines whether an authorization rule exists.
@@ -170,7 +210,12 @@ func (s *Server) HasNamedPolicy(ctx context.Context, in *pb.PolicyRequest) (*pb.
170210
return &pb.BoolReply{}, err
171211
}
172212

173-
return &pb.BoolReply{Res: e.GetModel().HasPolicy("p", in.PType, in.Params)}, nil
213+
hasPolicy, err := e.GetModel().HasPolicy("p", in.PType, in.Params)
214+
if err != nil {
215+
return &pb.BoolReply{}, err
216+
}
217+
218+
return &pb.BoolReply{Res: hasPolicy}, nil
174219
}
175220

176221
// HasGroupingPolicy determines whether a role inheritance rule exists.
@@ -186,7 +231,12 @@ func (s *Server) HasNamedGroupingPolicy(ctx context.Context, in *pb.PolicyReques
186231
return &pb.BoolReply{}, err
187232
}
188233

189-
return &pb.BoolReply{Res: e.GetModel().HasPolicy("g", in.PType, in.Params)}, nil
234+
haPolicy, err := e.GetModel().HasPolicy("g", in.PType, in.Params)
235+
if err != nil {
236+
return &pb.BoolReply{}, err
237+
}
238+
239+
return &pb.BoolReply{Res: haPolicy}, nil
190240
}
191241

192242
func (s *Server) AddPolicy(ctx context.Context, in *pb.PolicyRequest) (*pb.BoolReply, error) {

server/model_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func TestRBACModel(t *testing.T) {
5959
t.Error(err)
6060
}
6161

62-
resp, err := s.NewEnforcer(ctx, &pb.NewEnforcerRequest{ModelText: string(modelText), AdapterHandle: 0})
62+
resp, err := s.NewEnforcer(ctx, &pb.NewEnforcerRequest{ModelText: string(modelText), AdapterHandle: 0, EnableAcceptJsonRequest: false})
6363
if err != nil {
6464
t.Error(err)
6565
}
@@ -90,7 +90,7 @@ func TestABACModel(t *testing.T) {
9090
t.Error(err)
9191
}
9292

93-
resp, err := s.NewEnforcer(ctx, &pb.NewEnforcerRequest{ModelText: string(modelText), AdapterHandle: -1})
93+
resp, err := s.NewEnforcer(ctx, &pb.NewEnforcerRequest{ModelText: string(modelText), AdapterHandle: -1, EnableAcceptJsonRequest: false})
9494
if err != nil {
9595
t.Error(err)
9696
}

server/rbac_api.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,12 @@ func (s *Server) GetPermissionsForUser(ctx context.Context, in *pb.PermissionReq
217217
return &pb.Array2DReply{}, err
218218
}
219219

220-
return s.wrapPlainPolicy(e.GetFilteredPolicy(0, in.User)), nil
220+
filteredPolicy, err := e.GetFilteredPolicy(0, in.User)
221+
if err != nil {
222+
return &pb.Array2DReply{}, err
223+
}
224+
225+
return s.wrapPlainPolicy(filteredPolicy), nil
221226
}
222227

223228
// GetImplicitPermissionsForUser gets all permissions(including children) for a user or role.
@@ -237,7 +242,12 @@ func (s *Server) HasPermissionForUser(ctx context.Context, in *pb.PermissionRequ
237242
return &pb.BoolReply{}, err
238243
}
239244

240-
return &pb.BoolReply{Res: e.HasPolicy(s.convertPermissions(in.User, in.Permissions...)...)}, nil
245+
hasPolicy, err := e.HasPolicy(s.convertPermissions(in.User, in.Permissions...)...)
246+
if err != nil {
247+
return &pb.BoolReply{}, err
248+
}
249+
250+
return &pb.BoolReply{Res: hasPolicy}, nil
241251
}
242252

243253
func (s *Server) convertPermissions(user string, permissions ...string) []interface{} {

server/test_util.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func newTestEngine(t *testing.T, from, connectStr string, modelLoc string) *test
4242
t.Fatal(err)
4343
}
4444

45-
resp, err := s.NewEnforcer(ctx, &pb.NewEnforcerRequest{ModelText: string(modelText), AdapterHandle: 0})
45+
resp, err := s.NewEnforcer(ctx, &pb.NewEnforcerRequest{ModelText: string(modelText), AdapterHandle: 0, EnableAcceptJsonRequest: true})
4646
if err != nil {
4747
t.Fatal(err)
4848
}

0 commit comments

Comments
 (0)