@@ -60,6 +60,35 @@ public static synchronized RangerAuthorizationHivePlugin getInstance(Map<String,
60
60
return instance ;
61
61
}
62
62
63
+ /** Validate different Ranger metadata object */
64
+ @ Override
65
+ public void validateRangerMetadataObject (List <String > names , RangerMetadataObject .Type type )
66
+ throws IllegalArgumentException {
67
+ Preconditions .checkArgument (
68
+ names != null && !names .isEmpty (), "Cannot create a Ranger metadata object with no names" );
69
+ Preconditions .checkArgument (
70
+ names .size () <= 3 ,
71
+ "Cannot create a Ranger metadata object with the name length which is greater than 3" );
72
+ Preconditions .checkArgument (
73
+ type != null , "Cannot create a Ranger metadata object with no type" );
74
+
75
+ Preconditions .checkArgument (
76
+ names .size () != 1 || type == RangerMetadataObject .Type .SCHEMA ,
77
+ "If the length of names is 1, it must be the SCHEMA type" );
78
+
79
+ Preconditions .checkArgument (
80
+ names .size () != 2 || type == RangerMetadataObject .Type .TABLE ,
81
+ "If the length of names is 2, it must be the TABLE type" );
82
+
83
+ Preconditions .checkArgument (
84
+ names .size () != 3 || type == RangerMetadataObject .Type .COLUMN ,
85
+ "If the length of names is 3, it must be COLUMN" );
86
+
87
+ for (String name : names ) {
88
+ RangerMetadataObjects .checkName (name );
89
+ }
90
+ }
91
+
63
92
@ Override
64
93
/** Set the default mapping Gravitino privilege name to the Ranger rule */
65
94
public Map <Privilege .Name , Set <RangerPrivilege >> privilegesMappingRule () {
@@ -110,78 +139,79 @@ public Set<Privilege.Name> allowPrivilegesRule() {
110
139
}
111
140
112
141
/** Translate the Gravitino securable object to the Ranger owner securable object. */
113
- public List <RangerSecurableObject > translateOwner (MetadataObject metadataObject ) {
142
+ public List <RangerSecurableObject > translateOwner (MetadataObject gravitinoMetadataObject ) {
114
143
List <RangerSecurableObject > rangerSecurableObjects = new ArrayList <>();
115
144
116
- switch (metadataObject .type ()) {
145
+ switch (gravitinoMetadataObject .type ()) {
117
146
case METALAKE :
118
147
case CATALOG :
119
148
// Add `*` for the SCHEMA permission
120
149
rangerSecurableObjects .add (
121
- RangerSecurableObjects . of (
150
+ generateRangerSecurableObject (
122
151
ImmutableList .of (RangerHelper .RESOURCE_ALL ),
123
- MetadataObject .Type .SCHEMA ,
152
+ RangerMetadataObject .Type .SCHEMA ,
124
153
ownerMappingRule ()));
125
154
// Add `*.*` for the TABLE permission
126
155
rangerSecurableObjects .add (
127
- RangerSecurableObjects . of (
156
+ generateRangerSecurableObject (
128
157
ImmutableList .of (RangerHelper .RESOURCE_ALL , RangerHelper .RESOURCE_ALL ),
129
- MetadataObject .Type .TABLE ,
158
+ RangerMetadataObject .Type .TABLE ,
130
159
ownerMappingRule ()));
131
160
// Add `*.*.*` for the COLUMN permission
132
161
rangerSecurableObjects .add (
133
- RangerSecurableObjects . of (
162
+ generateRangerSecurableObject (
134
163
ImmutableList .of (
135
164
RangerHelper .RESOURCE_ALL ,
136
165
RangerHelper .RESOURCE_ALL ,
137
166
RangerHelper .RESOURCE_ALL ),
138
- MetadataObject .Type .COLUMN ,
167
+ RangerMetadataObject .Type .COLUMN ,
139
168
ownerMappingRule ()));
140
169
break ;
141
170
case SCHEMA :
142
171
// Add `{schema}` for the SCHEMA permission
143
172
rangerSecurableObjects .add (
144
- RangerSecurableObjects . of (
145
- ImmutableList .of (metadataObject .name () /*Schema name*/ ),
146
- MetadataObject .Type .SCHEMA ,
173
+ generateRangerSecurableObject (
174
+ ImmutableList .of (gravitinoMetadataObject .name () /*Schema name*/ ),
175
+ RangerMetadataObject .Type .SCHEMA ,
147
176
ownerMappingRule ()));
148
177
// Add `{schema}.*` for the TABLE permission
149
178
rangerSecurableObjects .add (
150
- RangerSecurableObjects .of (
151
- ImmutableList .of (metadataObject .name () /*Schema name*/ , RangerHelper .RESOURCE_ALL ),
152
- MetadataObject .Type .TABLE ,
179
+ generateRangerSecurableObject (
180
+ ImmutableList .of (
181
+ gravitinoMetadataObject .name () /*Schema name*/ , RangerHelper .RESOURCE_ALL ),
182
+ RangerMetadataObject .Type .TABLE ,
153
183
ownerMappingRule ()));
154
184
// Add `{schema}.*.*` for the COLUMN permission
155
185
rangerSecurableObjects .add (
156
- RangerSecurableObjects . of (
186
+ generateRangerSecurableObject (
157
187
ImmutableList .of (
158
- metadataObject .name () /*Schema name*/ ,
188
+ gravitinoMetadataObject .name () /*Schema name*/ ,
159
189
RangerHelper .RESOURCE_ALL ,
160
190
RangerHelper .RESOURCE_ALL ),
161
- MetadataObject .Type .COLUMN ,
191
+ RangerMetadataObject .Type .COLUMN ,
162
192
ownerMappingRule ()));
163
193
break ;
164
194
case TABLE :
165
195
// Add `{schema}.{table}` for the TABLE permission
166
196
rangerSecurableObjects .add (
167
- RangerSecurableObjects . of (
168
- convertToRangerMetadataObject (metadataObject ),
169
- MetadataObject .Type .TABLE ,
197
+ generateRangerSecurableObject (
198
+ convertToRangerMetadataObject (gravitinoMetadataObject ),
199
+ RangerMetadataObject .Type .TABLE ,
170
200
ownerMappingRule ()));
171
201
// Add `{schema}.{table}.*` for the COLUMN permission
172
202
rangerSecurableObjects .add (
173
- RangerSecurableObjects . of (
203
+ generateRangerSecurableObject (
174
204
Stream .concat (
175
- convertToRangerMetadataObject (metadataObject ).stream (),
205
+ convertToRangerMetadataObject (gravitinoMetadataObject ).stream (),
176
206
Stream .of (RangerHelper .RESOURCE_ALL ))
177
207
.collect (Collectors .toList ()),
178
- MetadataObject .Type .COLUMN ,
208
+ RangerMetadataObject .Type .COLUMN ,
179
209
ownerMappingRule ()));
180
210
break ;
181
211
default :
182
212
throw new AuthorizationPluginException (
183
213
"The owner privilege is not supported for the securable object: %s" ,
184
- metadataObject .type ());
214
+ gravitinoMetadataObject .type ());
185
215
}
186
216
187
217
return rangerSecurableObjects ;
@@ -214,9 +244,9 @@ public List<RangerSecurableObject> translatePrivilege(SecurableObject securableO
214
244
case CATALOG :
215
245
// Add Ranger privilege(`SELECT`) to SCHEMA(`*`)
216
246
rangerSecurableObjects .add (
217
- RangerSecurableObjects . of (
247
+ generateRangerSecurableObject (
218
248
ImmutableList .of (RangerHelper .RESOURCE_ALL ),
219
- MetadataObject .Type .SCHEMA ,
249
+ RangerMetadataObject .Type .SCHEMA ,
220
250
rangerPrivileges ));
221
251
break ;
222
252
default :
@@ -231,9 +261,9 @@ public List<RangerSecurableObject> translatePrivilege(SecurableObject securableO
231
261
case CATALOG :
232
262
// Add Ranger privilege(`CREATE`) to SCHEMA(`*`)
233
263
rangerSecurableObjects .add (
234
- RangerSecurableObjects . of (
264
+ generateRangerSecurableObject (
235
265
ImmutableList .of (RangerHelper .RESOURCE_ALL ),
236
- MetadataObject .Type .SCHEMA ,
266
+ RangerMetadataObject .Type .SCHEMA ,
237
267
rangerPrivileges ));
238
268
break ;
239
269
default :
@@ -248,17 +278,17 @@ public List<RangerSecurableObject> translatePrivilege(SecurableObject securableO
248
278
case CATALOG :
249
279
// Add Ranger privilege(`SELECT`) to SCHEMA(`*`)
250
280
rangerSecurableObjects .add (
251
- RangerSecurableObjects . of (
281
+ generateRangerSecurableObject (
252
282
ImmutableList .of (RangerHelper .RESOURCE_ALL ),
253
- MetadataObject .Type .SCHEMA ,
283
+ RangerMetadataObject .Type .SCHEMA ,
254
284
rangerPrivileges ));
255
285
break ;
256
286
case SCHEMA :
257
287
// Add Ranger privilege(`SELECT`) to SCHEMA(`{schema}`)
258
288
rangerSecurableObjects .add (
259
- RangerSecurableObjects . of (
289
+ generateRangerSecurableObject (
260
290
ImmutableList .of (securableObject .name () /*Schema name*/ ),
261
- MetadataObject .Type .SCHEMA ,
291
+ RangerMetadataObject .Type .SCHEMA ,
262
292
rangerPrivileges ));
263
293
break ;
264
294
default :
@@ -275,38 +305,38 @@ public List<RangerSecurableObject> translatePrivilege(SecurableObject securableO
275
305
case CATALOG :
276
306
// Add `*.*` for the TABLE permission
277
307
rangerSecurableObjects .add (
278
- RangerSecurableObjects . of (
308
+ generateRangerSecurableObject (
279
309
ImmutableList .of (
280
310
RangerHelper .RESOURCE_ALL , RangerHelper .RESOURCE_ALL ),
281
- MetadataObject .Type .TABLE ,
311
+ RangerMetadataObject .Type .TABLE ,
282
312
rangerPrivileges ));
283
313
// Add `*.*.*` for the COLUMN permission
284
314
rangerSecurableObjects .add (
285
- RangerSecurableObjects . of (
315
+ generateRangerSecurableObject (
286
316
ImmutableList .of (
287
317
RangerHelper .RESOURCE_ALL ,
288
318
RangerHelper .RESOURCE_ALL ,
289
319
RangerHelper .RESOURCE_ALL ),
290
- MetadataObject .Type .COLUMN ,
320
+ RangerMetadataObject .Type .COLUMN ,
291
321
rangerPrivileges ));
292
322
break ;
293
323
case SCHEMA :
294
324
// Add `{schema}.*` for the TABLE permission
295
325
rangerSecurableObjects .add (
296
- RangerSecurableObjects . of (
326
+ generateRangerSecurableObject (
297
327
ImmutableList .of (
298
328
securableObject .name () /*Schema name*/ ,
299
329
RangerHelper .RESOURCE_ALL ),
300
- MetadataObject .Type .TABLE ,
330
+ RangerMetadataObject .Type .TABLE ,
301
331
rangerPrivileges ));
302
332
// Add `{schema}.*.*` for the COLUMN permission
303
333
rangerSecurableObjects .add (
304
- RangerSecurableObjects . of (
334
+ generateRangerSecurableObject (
305
335
ImmutableList .of (
306
336
securableObject .name () /*Schema name*/ ,
307
337
RangerHelper .RESOURCE_ALL ,
308
338
RangerHelper .RESOURCE_ALL ),
309
- MetadataObject .Type .COLUMN ,
339
+ RangerMetadataObject .Type .COLUMN ,
310
340
rangerPrivileges ));
311
341
break ;
312
342
case TABLE :
@@ -317,18 +347,18 @@ public List<RangerSecurableObject> translatePrivilege(SecurableObject securableO
317
347
} else {
318
348
// Add `{schema}.{table}` for the TABLE permission
319
349
rangerSecurableObjects .add (
320
- RangerSecurableObjects . of (
350
+ generateRangerSecurableObject (
321
351
convertToRangerMetadataObject (securableObject ),
322
- MetadataObject .Type .TABLE ,
352
+ RangerMetadataObject .Type .TABLE ,
323
353
rangerPrivileges ));
324
354
// Add `{schema}.{table}.*` for the COLUMN permission
325
355
rangerSecurableObjects .add (
326
- RangerSecurableObjects . of (
356
+ generateRangerSecurableObject (
327
357
Stream .concat (
328
358
convertToRangerMetadataObject (securableObject ).stream (),
329
359
Stream .of (RangerHelper .RESOURCE_ALL ))
330
360
.collect (Collectors .toList ()),
331
- MetadataObject .Type .COLUMN ,
361
+ RangerMetadataObject .Type .COLUMN ,
332
362
rangerPrivileges ));
333
363
}
334
364
break ;
0 commit comments