25
25
import org .apache .gravitino .Configs ;
26
26
import org .apache .gravitino .EntityStore ;
27
27
import org .apache .gravitino .MetadataObject ;
28
+ import org .apache .gravitino .NameIdentifier ;
28
29
import org .apache .gravitino .exceptions .GroupAlreadyExistsException ;
29
30
import org .apache .gravitino .exceptions .IllegalRoleException ;
30
31
import org .apache .gravitino .exceptions .NoSuchGroupException ;
34
35
import org .apache .gravitino .exceptions .NoSuchUserException ;
35
36
import org .apache .gravitino .exceptions .RoleAlreadyExistsException ;
36
37
import org .apache .gravitino .exceptions .UserAlreadyExistsException ;
38
+ import org .apache .gravitino .lock .LockType ;
39
+ import org .apache .gravitino .lock .TreeLockUtils ;
37
40
import org .apache .gravitino .storage .IdGenerator ;
41
+ import org .apache .gravitino .utils .MetadataObjectUtil ;
38
42
39
43
/**
40
44
* AccessControlManager is used for manage users, roles, grant information, this class is an
@@ -57,78 +61,120 @@ public AccessControlManager(EntityStore store, IdGenerator idGenerator, Config c
57
61
@ Override
58
62
public User addUser (String metalake , String user )
59
63
throws UserAlreadyExistsException , NoSuchMetalakeException {
60
- return userGroupManager .addUser (metalake , user );
64
+ return TreeLockUtils .doWithTreeLock (
65
+ NameIdentifier .of (AuthorizationUtils .ofUserNamespace (metalake ).levels ()),
66
+ LockType .WRITE ,
67
+ () -> userGroupManager .addUser (metalake , user ));
61
68
}
62
69
63
70
@ Override
64
71
public boolean removeUser (String metalake , String user ) throws NoSuchMetalakeException {
65
- return userGroupManager .removeUser (metalake , user );
72
+ return TreeLockUtils .doWithTreeLock (
73
+ NameIdentifier .of (AuthorizationUtils .ofUserNamespace (metalake ).levels ()),
74
+ LockType .WRITE ,
75
+ () -> userGroupManager .removeUser (metalake , user ));
66
76
}
67
77
68
78
@ Override
69
79
public User getUser (String metalake , String user )
70
80
throws NoSuchUserException , NoSuchMetalakeException {
71
- return userGroupManager .getUser (metalake , user );
81
+ return TreeLockUtils .doWithTreeLock (
82
+ AuthorizationUtils .ofUser (metalake , user ),
83
+ LockType .READ ,
84
+ () -> userGroupManager .getUser (metalake , user ));
72
85
}
73
86
74
87
@ Override
75
88
public String [] listUserNames (String metalake ) throws NoSuchMetalakeException {
76
- return userGroupManager .listUserNames (metalake );
89
+ return TreeLockUtils .doWithTreeLock (
90
+ NameIdentifier .of (AuthorizationUtils .ofUserNamespace (metalake ).levels ()),
91
+ LockType .READ ,
92
+ () -> userGroupManager .listUserNames (metalake ));
77
93
}
78
94
79
95
@ Override
80
96
public User [] listUsers (String metalake ) throws NoSuchMetalakeException {
81
- return userGroupManager .listUsers (metalake );
97
+ return TreeLockUtils .doWithTreeLock (
98
+ NameIdentifier .of (AuthorizationUtils .ofUserNamespace (metalake ).levels ()),
99
+ LockType .READ ,
100
+ () -> userGroupManager .listUsers (metalake ));
82
101
}
83
102
84
103
public Group addGroup (String metalake , String group )
85
104
throws GroupAlreadyExistsException , NoSuchMetalakeException {
86
- return userGroupManager .addGroup (metalake , group );
105
+ return TreeLockUtils .doWithTreeLock (
106
+ NameIdentifier .of (AuthorizationUtils .ofGroupNamespace (metalake ).levels ()),
107
+ LockType .WRITE ,
108
+ () -> userGroupManager .addGroup (metalake , group ));
87
109
}
88
110
89
111
@ Override
90
112
public boolean removeGroup (String metalake , String group ) throws NoSuchMetalakeException {
91
- return userGroupManager .removeGroup (metalake , group );
113
+ return TreeLockUtils .doWithTreeLock (
114
+ NameIdentifier .of (AuthorizationUtils .ofGroupNamespace (metalake ).levels ()),
115
+ LockType .WRITE ,
116
+ () -> userGroupManager .removeGroup (metalake , group ));
92
117
}
93
118
94
119
@ Override
95
120
public Group getGroup (String metalake , String group )
96
121
throws NoSuchGroupException , NoSuchMetalakeException {
97
- return userGroupManager .getGroup (metalake , group );
122
+ return TreeLockUtils .doWithTreeLock (
123
+ AuthorizationUtils .ofGroup (metalake , group ),
124
+ LockType .READ ,
125
+ () -> userGroupManager .getGroup (metalake , group ));
98
126
}
99
127
100
128
@ Override
101
129
public Group [] listGroups (String metalake ) throws NoSuchMetalakeException {
102
- return userGroupManager .listGroups (metalake );
130
+ return TreeLockUtils .doWithTreeLock (
131
+ NameIdentifier .of (AuthorizationUtils .ofGroupNamespace (metalake ).levels ()),
132
+ LockType .READ ,
133
+ () -> userGroupManager .listGroups (metalake ));
103
134
}
104
135
105
136
@ Override
106
137
public String [] listGroupNames (String metalake ) throws NoSuchMetalakeException {
107
- return userGroupManager .listGroupNames (metalake );
138
+ return TreeLockUtils .doWithTreeLock (
139
+ NameIdentifier .of (AuthorizationUtils .ofGroupNamespace (metalake ).levels ()),
140
+ LockType .READ ,
141
+ () -> userGroupManager .listGroupNames (metalake ));
108
142
}
109
143
110
144
@ Override
111
145
public User grantRolesToUser (String metalake , List <String > roles , String user )
112
146
throws NoSuchUserException , IllegalRoleException , NoSuchMetalakeException {
113
- return permissionManager .grantRolesToUser (metalake , roles , user );
147
+ return TreeLockUtils .doWithTreeLock (
148
+ AuthorizationUtils .ofUser (metalake , user ),
149
+ LockType .WRITE ,
150
+ () -> permissionManager .grantRolesToUser (metalake , roles , user ));
114
151
}
115
152
116
153
@ Override
117
154
public Group grantRolesToGroup (String metalake , List <String > roles , String group )
118
155
throws NoSuchGroupException , IllegalRoleException , NoSuchMetalakeException {
119
- return permissionManager .grantRolesToGroup (metalake , roles , group );
156
+ return TreeLockUtils .doWithTreeLock (
157
+ AuthorizationUtils .ofGroup (metalake , group ),
158
+ LockType .WRITE ,
159
+ () -> permissionManager .grantRolesToGroup (metalake , roles , group ));
120
160
}
121
161
122
162
@ Override
123
163
public Group revokeRolesFromGroup (String metalake , List <String > roles , String group )
124
164
throws NoSuchGroupException , IllegalRoleException , NoSuchMetalakeException {
125
- return permissionManager .revokeRolesFromGroup (metalake , roles , group );
165
+ return TreeLockUtils .doWithTreeLock (
166
+ AuthorizationUtils .ofGroup (metalake , group ),
167
+ LockType .WRITE ,
168
+ () -> permissionManager .revokeRolesFromGroup (metalake , roles , group ));
126
169
}
127
170
128
171
@ Override
129
172
public User revokeRolesFromUser (String metalake , List <String > roles , String user )
130
173
throws NoSuchUserException , IllegalRoleException , NoSuchMetalakeException {
131
- return permissionManager .revokeRolesFromUser (metalake , roles , user );
174
+ return TreeLockUtils .doWithTreeLock (
175
+ AuthorizationUtils .ofUser (metalake , user ),
176
+ LockType .WRITE ,
177
+ () -> permissionManager .revokeRolesFromUser (metalake , roles , user ));
132
178
}
133
179
134
180
@ Override
@@ -143,42 +189,62 @@ public Role createRole(
143
189
Map <String , String > properties ,
144
190
List <SecurableObject > securableObjects )
145
191
throws RoleAlreadyExistsException , NoSuchMetalakeException {
146
- return roleManager .createRole (metalake , role , properties , securableObjects );
192
+ return TreeLockUtils .doWithTreeLock (
193
+ NameIdentifier .of (AuthorizationUtils .ofRoleNamespace (metalake ).levels ()),
194
+ LockType .WRITE ,
195
+ () -> roleManager .createRole (metalake , role , properties , securableObjects ));
147
196
}
148
197
149
198
@ Override
150
199
public Role getRole (String metalake , String role )
151
200
throws NoSuchRoleException , NoSuchMetalakeException {
152
- return roleManager .getRole (metalake , role );
201
+ return TreeLockUtils .doWithTreeLock (
202
+ AuthorizationUtils .ofRole (metalake , role ),
203
+ LockType .READ ,
204
+ () -> roleManager .getRole (metalake , role ));
153
205
}
154
206
155
207
@ Override
156
208
public boolean deleteRole (String metalake , String role ) throws NoSuchMetalakeException {
157
- return roleManager .deleteRole (metalake , role );
209
+ return TreeLockUtils .doWithTreeLock (
210
+ NameIdentifier .of (AuthorizationUtils .ofRoleNamespace (metalake ).levels ()),
211
+ LockType .WRITE ,
212
+ () -> roleManager .deleteRole (metalake , role ));
158
213
}
159
214
160
215
@ Override
161
216
public String [] listRoleNames (String metalake ) throws NoSuchMetalakeException {
162
- return roleManager .listRoleNames (metalake );
217
+ return TreeLockUtils .doWithTreeLock (
218
+ NameIdentifier .of (AuthorizationUtils .ofRoleNamespace (metalake ).levels ()),
219
+ LockType .READ ,
220
+ () -> roleManager .listRoleNames (metalake ));
163
221
}
164
222
165
223
@ Override
166
224
public String [] listRoleNamesByObject (String metalake , MetadataObject object )
167
225
throws NoSuchMetalakeException , NoSuchMetadataObjectException {
168
- return roleManager .listRoleNamesByObject (metalake , object );
226
+ NameIdentifier identifier = MetadataObjectUtil .toEntityIdent (metalake , object );
227
+ return TreeLockUtils .doWithTreeLock (
228
+ identifier , LockType .READ , () -> roleManager .listRoleNamesByObject (metalake , object ));
169
229
}
170
230
171
231
@ Override
172
232
public Role grantPrivilegeToRole (
173
233
String metalake , String role , MetadataObject object , Set <Privilege > privileges )
174
234
throws NoSuchRoleException , NoSuchMetalakeException {
175
- return permissionManager .grantPrivilegesToRole (metalake , role , object , privileges );
235
+ return TreeLockUtils .doWithTreeLock (
236
+ AuthorizationUtils .ofRole (metalake , role ),
237
+ LockType .WRITE ,
238
+ () -> permissionManager .grantPrivilegesToRole (metalake , role , object , privileges ));
176
239
}
177
240
178
241
@ Override
179
242
public Role revokePrivilegesFromRole (
180
243
String metalake , String role , MetadataObject object , Set <Privilege > privileges )
181
244
throws NoSuchRoleException , NoSuchMetalakeException {
182
- return permissionManager .revokePrivilegesFromRole (metalake , role , object , privileges );
245
+ return TreeLockUtils .doWithTreeLock (
246
+ AuthorizationUtils .ofRole (metalake , role ),
247
+ LockType .WRITE ,
248
+ () -> permissionManager .revokePrivilegesFromRole (metalake , role , object , privileges ));
183
249
}
184
250
}
0 commit comments