@@ -112,7 +112,7 @@ var _ = Describe("user share provider service", func() {
112
112
}
113
113
manager .On ("GetShare" , mock .Anything , mock .Anything ).Return (getShareResponse , nil )
114
114
115
- rgrpcService := usershareprovider .New (gatewaySelector , manager , []* regexp.Regexp {})
115
+ rgrpcService := usershareprovider .New (gatewaySelector , manager , []* regexp.Regexp {}, false )
116
116
117
117
provider = rgrpcService .(collaborationpb.CollaborationAPIServer )
118
118
Expect (provider ).ToNot (BeNil ())
@@ -183,6 +183,52 @@ var _ = Describe("user share provider service", func() {
183
183
0 ,
184
184
),
185
185
)
186
+ Context ("resharing disabled" , func () {
187
+ JustBeforeEach (func () {
188
+ // disable resharing
189
+ rgrpcService := usershareprovider .New (gatewaySelector , manager , []* regexp.Regexp {}, true )
190
+
191
+ provider = rgrpcService .(collaborationpb.CollaborationAPIServer )
192
+ Expect (provider ).ToNot (BeNil ())
193
+
194
+ // user has list grants access
195
+ statResourceResponse .Info .PermissionSet = & providerpb.ResourcePermissions {
196
+ AddGrant : true ,
197
+ ListGrants : true ,
198
+ }
199
+ })
200
+ DescribeTable ("rejects shares with any grant changing permissions" ,
201
+ func (
202
+ resourceInfoPermissions * providerpb.ResourcePermissions ,
203
+ grantPermissions * providerpb.ResourcePermissions ,
204
+ responseCode rpcpb.Code ,
205
+ expectedCalls int ,
206
+ ) {
207
+ manager .On ("Share" , mock .Anything , mock .Anything , mock .Anything ).Return (& collaborationpb.Share {}, nil )
208
+
209
+ createShareResponse , err := provider .CreateShare (ctx , & collaborationpb.CreateShareRequest {
210
+ ResourceInfo : & providerpb.ResourceInfo {
211
+ PermissionSet : resourceInfoPermissions ,
212
+ },
213
+ Grant : & collaborationpb.ShareGrant {
214
+ Permissions : & collaborationpb.SharePermissions {
215
+ Permissions : grantPermissions ,
216
+ },
217
+ },
218
+ })
219
+
220
+ Expect (err ).ToNot (HaveOccurred ())
221
+ Expect (createShareResponse .Status .Code ).To (Equal (responseCode ))
222
+
223
+ manager .AssertNumberOfCalls (GinkgoT (), "Share" , expectedCalls )
224
+ },
225
+ Entry ("AddGrant" , conversions .RoleFromName ("manager" , true ).CS3ResourcePermissions (), & providerpb.ResourcePermissions {AddGrant : true }, rpcpb .Code_CODE_INVALID_ARGUMENT , 0 ),
226
+ Entry ("UpdateGrant" , conversions .RoleFromName ("manager" , true ).CS3ResourcePermissions (), & providerpb.ResourcePermissions {UpdateGrant : true }, rpcpb .Code_CODE_INVALID_ARGUMENT , 0 ),
227
+ Entry ("RemoveGrant" , conversions .RoleFromName ("manager" , true ).CS3ResourcePermissions (), & providerpb.ResourcePermissions {RemoveGrant : true }, rpcpb .Code_CODE_INVALID_ARGUMENT , 0 ),
228
+ Entry ("DenyGrant" , conversions .RoleFromName ("manager" , true ).CS3ResourcePermissions (), & providerpb.ResourcePermissions {DenyGrant : true }, rpcpb .Code_CODE_INVALID_ARGUMENT , 0 ),
229
+ Entry ("ListGrants" , conversions .RoleFromName ("manager" , true ).CS3ResourcePermissions (), & providerpb.ResourcePermissions {ListGrants : true }, rpcpb .Code_CODE_OK , 1 ),
230
+ )
231
+ })
186
232
})
187
233
Describe ("UpdateShare" , func () {
188
234
It ("fails without WriteShare permission in user role" , func () {
0 commit comments