Skip to content

Commit 5940550

Browse files
committed
feat: Ads permissions to api Keys
1 parent aa99025 commit 5940550

File tree

4 files changed

+41
-14
lines changed

4 files changed

+41
-14
lines changed

alpine-infra/src/main/java/alpine/persistence/AlpineQueryManager.java

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -798,18 +798,11 @@ public boolean hasPermission(final Team team, String permissionName) {
798798
* @since 1.1.1
799799
*/
800800
public boolean hasPermission(final ApiKey apiKey, String permissionName) {
801-
if (apiKey.getTeams() == null) {
802-
return false;
803-
}
804-
for (final Team team: apiKey.getTeams()) {
805-
final List<Permission> teamPermissions = getObjectById(Team.class, team.getId()).getPermissions();
806-
for (final Permission permission: teamPermissions) {
807-
if (permission.getName().equals(permissionName)) {
808-
return true;
809-
}
810-
}
811-
}
812-
return false;
801+
final Query<Permission> query = pm.newQuery(Permission.class, "name == :permissionName && apiKey.contains(apiKey) && apiKey.id == :apiKeyId");
802+
query.declareVariables("alpine.model.ApiKey apiKey");
803+
query.setParameters(permissionName, apiKey.getId());
804+
query.setResult("count(id)");
805+
return executeAndCloseResultUnique(query, Long.class) > 0;
813806
}
814807

815808
/**

alpine-model/src/main/java/alpine/model/ApiKey.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@ public class ApiKey implements Serializable, Principal {
8686
@JsonIgnore
8787
private List<Team> teams;
8888

89+
@Persistent(table = "APIKEYS_PERMISSIONS", defaultFetchGroup = "true")
90+
@Join(column = "APIKEY_ID")
91+
@Element(column = "PERMISSION_ID")
92+
@Order(extensions = @Extension(vendorName = "datanucleus", key = "list-ordering", value = "name ASC"))
93+
private List<Permission> permissions;
8994
public long getId() {
9095
return id;
9196
}
@@ -166,5 +171,12 @@ public void setTeams(List<Team> teams) {
166171
this.teams = teams;
167172
}
168173

169-
}
174+
public List<Permission> getPermissions() {
175+
return permissions;
176+
}
170177

178+
public void setPermissions(List<Permission> permissions) {
179+
this.permissions = permissions;
180+
}
181+
182+
}

alpine-model/src/main/java/alpine/model/Permission.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@ public class Permission implements Serializable {
8585
@JsonIgnore
8686
private List<ManagedUser> managedUsers;
8787

88+
@Persistent(mappedBy = "permissions")
89+
@Order(extensions = @Extension(vendorName = "datanucleus", key = "list-ordering", value = "username ASC"))
90+
@JsonIgnore
91+
private List<ApiKey> apiKeys;
92+
8893
public long getId() {
8994
return id;
9095
}
@@ -140,5 +145,12 @@ public List<ManagedUser> getManagedUsers() {
140145
public void setManagedUsers(List<ManagedUser> managedUsers) {
141146
this.managedUsers = managedUsers;
142147
}
143-
}
144148

149+
public List<ApiKey> getApiKeys() {
150+
return apiKeys;
151+
}
152+
153+
public void setApiKeys(List<ApiKey> apiKeys) {
154+
this.apiKeys = apiKeys;
155+
}
156+
}

alpine-model/src/test/java/alpine/model/ApiKeyTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,14 @@ public void teamsTest() {
8585
Assertions.assertEquals(teams, key.getTeams());
8686
Assertions.assertEquals(1, key.getTeams().size());
8787
}
88+
89+
@Test
90+
public void permissionsTest() {
91+
List<Permission> permissions = new ArrayList<>();
92+
permissions.add(new Permission());
93+
ApiKey user = new ApiKey();
94+
user.setPermissions(permissions);
95+
Assertions.assertEquals(permissions, user.getPermissions());
96+
Assertions.assertEquals(1, user.getPermissions().size());
97+
}
8898
}

0 commit comments

Comments
 (0)