From c08d1635629c588bb6689d81be2c8c748f5d22e9 Mon Sep 17 00:00:00 2001 From: Keith Woodlock Date: Thu, 30 May 2013 12:50:38 +0100 Subject: [PATCH] MIFOSX-395: provide optional staffId and staffDisplayName to auth response. --- api-docs/apiLive.htm | 69 ++++++++++++++----- .../api/AuthenticationApiResource.java | 7 +- .../security/data/AuthenticatedUserData.java | 14 +++- .../organisation/staff/domain/Staff.java | 6 +- .../useradministration/domain/AppUser.java | 16 +++++ 5 files changed, 90 insertions(+), 22 deletions(-) diff --git a/api-docs/apiLive.htm b/api-docs/apiLive.htm index d53245bc0..e13755a53 100644 --- a/api-docs/apiLive.htm +++ b/api-docs/apiLive.htm @@ -90,7 +90,7 @@
- +

Overview

@@ -12720,8 +12720,7 @@ GET https://DomainName/api/v1/runreports/{reportName}
-   +  

Verify authentication

@@ -12736,24 +12735,60 @@ POST authentication?username=mifos&password=password Content-Type: application/json No Request Body +

Example response of autentication for user that is not linked with any staff.

{ - "username": "mifos", - "userId": 1, - "base64EncodedAuthenticationKey": "bWlmb3M6cGFzc3dvcmQ=", - "authenticated": true, - "roles": [ - { - "id": 1, - "name": "Super user", - "description": "This role provides all application permissions." - } - ], - "permissions": [ - "ALL_FUNCTIONS" - ] + "username": "mifos", + "userId": 1, + "base64EncodedAuthenticationKey": "bWlmb3M6cGFzc3dvcmQ=", + "authenticated": true, + "officeId": 1, + "officeName": "Head Office", + "roles": [ + { + "id": 1, + "name": "Super user", + "description": "This role provides all application permissions." + } + ], + "permissions": [ + "ALL_FUNCTIONS" + ] } +

Example response of autentication for user that is linked with a staff member and role.

+ +{ + "username": "mifos", + "userId": 1, + "base64EncodedAuthenticationKey": "bWlmb3M6cGFzc3dvcmQ=", + "authenticated": true, + "officeId": 1, + "officeName": "Head Office", + "staffId": 1, + "staffDisplayName": "Director, Program", + "organisationalRole": { + "id": 100, + "code": "staffOrganisationalRoleType.programDirector", + "value": "Program Director" + }, + "roles": [ + { + "id": 1, + "name": "Super user", + "description": "This role provides all application permissions." + } + ], + "permissions": [ + "ALL_FUNCTIONS" + ] +} + + + + + + POST authentication?username=mifos&password=fail Content-Type: application/json diff --git a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/security/api/AuthenticationApiResource.java b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/security/api/AuthenticationApiResource.java index 6d985da05..a679364c4 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/security/api/AuthenticationApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/security/api/AuthenticationApiResource.java @@ -76,9 +76,14 @@ public class AuthenticationApiResource { final Long officeId = principal.getOffice().getId(); final String officeName = principal.getOffice().getName(); + + final Long staffId = principal.getStaffId(); + final String staffDisplayName = principal.getStaffDisplayName(); + final EnumOptionData organisationalRole = principal.organisationalRoleData(); - authenticatedUserData = new AuthenticatedUserData(username, officeId, officeName, organisationalRole, roles, permissions, + authenticatedUserData = new AuthenticatedUserData(username, officeId, officeName, staffId, staffDisplayName, + organisationalRole, roles, permissions, principal.getId(), new String(base64EncodedAuthenticationKey)); } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/security/data/AuthenticatedUserData.java b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/security/data/AuthenticatedUserData.java index a87920111..b787217c6 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/security/data/AuthenticatedUserData.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/infrastructure/security/data/AuthenticatedUserData.java @@ -28,6 +28,10 @@ public class AuthenticatedUserData { @SuppressWarnings("unused") private final String officeName; @SuppressWarnings("unused") + private final Long staffId; + @SuppressWarnings("unused") + private final String staffDisplayName; + @SuppressWarnings("unused") private final EnumOptionData organisationalRole; @SuppressWarnings("unused") private final Collection roles; @@ -41,17 +45,21 @@ public class AuthenticatedUserData { this.authenticated = false; this.officeId = null; this.officeName = null; + this.staffId = null; + this.staffDisplayName = null; this.organisationalRole = null; this.roles = null; this.permissions = permissions; } - public AuthenticatedUserData(final String username, final Long officeId, final String officeName, - final EnumOptionData organisationalRole, final Collection roles, final Collection permissions, - final Long userId, final String base64EncodedAuthenticationKey) { + public AuthenticatedUserData(final String username, final Long officeId, final String officeName, final Long staffId, + final String staffDisplayName, final EnumOptionData organisationalRole, final Collection roles, + final Collection permissions, final Long userId, final String base64EncodedAuthenticationKey) { this.username = username; this.officeId = officeId; this.officeName = officeName; + this.staffId = staffId; + this.staffDisplayName = staffDisplayName; this.organisationalRole = organisationalRole; this.userId = userId; this.base64EncodedAuthenticationKey = base64EncodedAuthenticationKey; diff --git a/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/domain/Staff.java b/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/domain/Staff.java index 79a3d8ddb..69d4c2df4 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/domain/Staff.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/organisation/staff/domain/Staff.java @@ -31,7 +31,6 @@ public class Staff extends AbstractPersistable { @Column(name = "lastname", length = 50) private String lastname; - @SuppressWarnings("unused") @Column(name = "display_name", length = 100) private String displayName; @@ -47,6 +46,7 @@ public class Staff extends AbstractPersistable { @Column(name = "organisational_role_enum", nullable = true) private Integer organisationalRoleType; + @SuppressWarnings("unused") @ManyToOne @JoinColumn(name = "organisational_role_parent_staff_id", nullable = true) private Staff organisationalRoleParentStaff; @@ -158,4 +158,8 @@ public class Staff extends AbstractPersistable { public Long officeId() { return this.office.getId(); } + + public String displayName() { + return this.displayName; + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/domain/AppUser.java b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/domain/AppUser.java index e5b88b0aa..befd04791 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/useradministration/domain/AppUser.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/useradministration/domain/AppUser.java @@ -465,4 +465,20 @@ public class AppUser extends AbstractPersistable implements PlatformUser { if (hasNotPermissionForDatatable(datatable, "READ")) { throw new NoAuthorizationException("Not authorised to read datatable: " + datatable); } } + + public Long getStaffId() { + Long staffId = null; + if (this.staff != null) { + staffId = this.staff.getId(); + } + return staffId; + } + + public String getStaffDisplayName() { + String staffDisplayName = null; + if (this.staff != null) { + staffDisplayName = this.staff.displayName(); + } + return staffDisplayName; + } } \ No newline at end of file