diff --git a/api-docs/apiLive.htm b/api-docs/apiLive.htm
index 1a85d8ed8..7e7fbc5b6 100644
--- a/api-docs/apiLive.htm
+++ b/api-docs/apiLive.htm
@@ -176,7 +176,8 @@ function getBaseURL(docURL)
| users/{userId} | | Retrieve a User | Update a User | Delete a User |
| ROLE | roles | Create a New Role | List Roles | | |
| roles/{roleId} | | Retrieve a Role | Update a Role | |
- | PERMISSION | permissions | | List Application Permissions | | |
+ | roles/{roleId}/permissions | | Retrieve a Role's Permissions | Update a Role's Permissions | |
+ | PERMISSION | permissions | | List Application Permissions | | |
@@ -193,7 +194,6 @@ function getBaseURL(docURL)
| offices/template | Retrieve Office Details Template |
| loanproducts/template | Retrieve Loan Product Details Template |
| users/template | Retrieve User Details Template |
- | roles/template | Retrieve Role Details Template |
@@ -2872,53 +2872,41 @@ No Request Body
GET https://Domain Name/api/v1/users/template
{
- "allowedOffices" : [ {
- "id" : 1,
- "name" : "Demo MFI Head Office"
- }, {
- "id" : 2,
- "name" : "sub branch 1"
- }, {
- "id" : 8,
- "name" : "moi aussi"
- }, {
- "id" : 3,
- "name" : "sub branch 2"
- }, {
- "id" : 4,
- "name" : "sub branch 3"
- }],
- "availableRoles" : [ {
- "id" : 1,
- "name" : "Super user",
- "description" : "This role provides all application permissions.",
- "availablePermissions" : [ ],
- "selectedPermissions" : [ ]
- }, {
- "id" : 2,
- "name" : "Field officer",
- "description" : "A field officer role allows the user to add client and loans and view reports but nothing else.",
- "availablePermissions" : [ ],
- "selectedPermissions" : [ ]
- }, {
- "id" : 3,
- "name" : "Data Entry (Portfolio only)",
- "description" : "This role allows a user full permissions around client and loan functionality but nothing else.",
- "availablePermissions" : [ ],
- "selectedPermissions" : [ ]
- }, {
- "id" : 4,
- "name" : "Credit Committe Member",
- "description" : "This role allows a user to approve reject or withdraw loans (with reporting).",
- "availablePermissions" : [ ],
- "selectedPermissions" : [ ]
- }, {
- "id" : 5,
- "name" : "Manager",
- "description" : "This role allows a manager to do anything related to portfolio management and also view all reports.",
- "availablePermissions" : [ ],
- "selectedPermissions" : [ ]
- } ]
+ "allowedOffices": [
+ {
+ "id": 1,
+ "name": "Head Office",
+ "nameDecorated": "Head Office"
+ },
+ {
+ "id": 10,
+ "name": "Myanmar Regional Office",
+ "nameDecorated": "....Myanmar Regional Office"
+ },
+ {
+ "id": 7,
+ "name": "Myanmar 1",
+ "nameDecorated": "........Myanmar 1"
+ },...
+ ],
+ "availableRoles": [
+ {
+ "id": 1,
+ "name": "Super user",
+ "description": "This role provides all application permissions."
+ },
+ {
+ "id": 2,
+ "name": "Field officer",
+ "description": "A field officer role allows the user to add client and loans and view reports but nothing else."
+ },
+ {
+ "id": 3,
+ "name": "Data Entry (Portfolio only)",
+ "description": "This role allows a user full permissions around client and loan functionality but nothing else."
+ },...
+ ],
+ "selectedRoles": []
}
@@ -2938,40 +2926,33 @@ No Request Body
GET https://Domain Name/api/v1/users/1
{
- "id" : 1,
- "officeId" : 1,
- "officeName" : "Demo MFI Head Office",
- "username" : "mifos",
- "firstname" : "App",
- "lastname" : "Administrator",
- "email" : "demomfi@mifos.org",
- "selectedRoles" : [ {
- "id" : 1,
- "name" : "Super user",
- "description" : "This role provides all application permissions.",
- "availablePermissions" : [ ],
- "selectedPermissions" : [ {
- "id" : 1,
- "name" : "User administration ALL",
- "description" : "An application user will have permission to execute all tasks related to user administration.",
- "code" : "USER_ADMINISTRATION_SUPER_USER_ROLE"
- }, {
- "id" : 4,
- "name" : "Reporting ALL",
- "description" : "An application user will have permission to execute and view all reports.",
- "code" : "REPORTING_SUPER_USER_ROLE"
- }, {
- "id" : 3,
- "name" : "Portfolio management ALL",
- "description" : "An application user will have permission to execute all tasks related to portfolio management.",
- "code" : "PORTFOLIO_MANAGEMENT_SUPER_USER_ROLE"
- }, {
- "id" : 2,
- "name" : "Organisation adminsitration ALL",
- "description" : "An application user will have permission to execute all tasks related to organisation administration.",
- "code" : "ORGANISATION_ADMINISTRATION_SUPER_USER_ROLE"
- } ]
- } ]
+ "id": 1,
+ "username": "mifos",
+ "officeId": 1,
+ "officeName": "Head Office",
+ "firstname": "App(test)",
+ "lastname": "Administrator",
+ "email": "demomfi@mifos.org",
+ "allowedOffices": [],
+ "availableRoles": [
+ {
+ "id": 2,
+ "name": "Field officer",
+ "description": "A field officer role allows the user to add client and loans and view reports but nothing else."
+ },
+ {
+ "id": 3,
+ "name": "Data Entry (Portfolio only)",
+ "description": "This role allows a user full permissions around client and loan functionality but nothing else."
+ },...
+ ],
+ "selectedRoles": [
+ {
+ "id": 1,
+ "name": "Super user",
+ "description": "This role provides all application permissions."
+ }
+ ]
}
@@ -3102,48 +3083,6 @@ No Request Body
"name" : "Manager",
"description" : "This role allows a manager to do anything related to portfolio management and also view all reports."
} ]
-
-
-
-
-
-
-
-
Retrieve Role Details Template
-
This is a convenience resource. It can be useful when building maintenance user interface screens for client applications. The template data returned consists of any or all of:
-
- - Field Defaults
- - Allowed Value Lists
-
-
-
Example Request:
-
roles/template
-
-
- GET https://Domain Name/api/v1/roles/template
-{
- "availablePermissions" : [ {
- "id" : 1,
- "name" : "User administration ALL",
- "description" : "An application user will have permission to execute all tasks related to user administration.",
- "code" : "USER_ADMINISTRATION_SUPER_USER_ROLE"
- }, {
- "id" : 2,
- "name" : "Organisation adminsitration ALL",
- "description" : "An application user will have permission to execute all tasks related to organisation administration.",
- "code" : "ORGANISATION_ADMINISTRATION_SUPER_USER_ROLE"
- }, {
- "id" : 3,
- "name" : "Portfolio management ALL",
- "description" : "An application user will have permission to execute all tasks related to portfolio management.",
- "code" : "PORTFOLIO_MANAGEMENT_SUPER_USER_ROLE"
- }, {
- "id" : 4,
- "name" : "Reporting ALL",
- "description" : "An application user will have permission to execute and view all reports.",
- "code" : "REPORTING_SUPER_USER_ROLE"
- }...]
-}
@@ -3155,37 +3094,14 @@ No Request Body
Example Requests:
roles/1
- roles/1?template=true
-
- roles/1?fields=name,selectedPermissions
+ roles/1?fields=name
GET https://Domain Name/api/v1/roles/{roleId}
{
"id" : 1,
"name" : "Super user",
- "description" : "This role provides all application permissions.",
- "selectedPermissions" : [ {
- "id" : 1,
- "name" : "User administration ALL",
- "description" : "An application user will have permission to execute all tasks related to user administration.",
- "code" : "USER_ADMINISTRATION_SUPER_USER_ROLE"
- }, {
- "id" : 4,
- "name" : "Reporting ALL",
- "description" : "An application user will have permission to execute and view all reports.",
- "code" : "REPORTING_SUPER_USER_ROLE"
- }, {
- "id" : 3,
- "name" : "Portfolio management ALL",
- "description" : "An application user will have permission to execute all tasks related to portfolio management.",
- "code" : "PORTFOLIO_MANAGEMENT_SUPER_USER_ROLE"
- }, {
- "id" : 2,
- "name" : "Organisation adminsitration ALL",
- "description" : "An application user will have permission to execute all tasks related to organisation administration.",
- "code" : "ORGANISATION_ADMINISTRATION_SUPER_USER_ROLE"
- } ]
+ "description" : "This role provides all application permissions."
}
@@ -3197,7 +3113,7 @@ No Request Body
Create a New Role
Mandatory Fields |
- | name, description, permissions |
+ | name, description |
@@ -3207,8 +3123,7 @@ Content-Type: application/json
Request body:
{
"name": "Another Role Name",
- "description": "A description outlining the purpose of this role in relation to the application.",
- "permissions": [1, 2, 3]
+ "description": "A description outlining the purpose of this role in relation to the application."
}
{
@@ -3229,8 +3144,7 @@ Request body:
Content-Type: application/json
Request body:
{
- "name": "Updated Role Name",
- "permissions": [1]
+ "name": "Updated Role Name"
}
{
@@ -3240,8 +3154,73 @@ Request body:
+
+
+
+
Retrieve a Role's Permissions
+
Example Requests:
+
roles/1/permissions
+
+
+ GET https://Domain Name/api/v1/roles/{roleId}/permissions
+{
+ "id": 1,
+ "name": "Super user",
+ "description": "This role provides all application permissions.",
+ "permissionUsageData": [
+ {
+ "grouping": "authorisation",
+ "code": "READ_PERMISSION",
+ "entityName": "PERMISSION",
+ "actionName": "READ",
+ "selected": false,
+ "isMakerChecker": false
+ },
+ {
+ "grouping": "authorisation",
+ "code": "CREATE_ROLE",
+ "entityName": "ROLE",
+ "actionName": "CREATE",
+ "selected": false,
+ "isMakerChecker": false
+ },
+ {
+ "grouping": "authorisation",
+ "code": "DELETE_ROLE",
+ "entityName": "ROLE",
+ "actionName": "DELETE",
+ "selected": false,
+ "isMakerChecker": false
+ },...]
+}
+
+
+
-
+
+
+
+
Update a Role's Permissions
+
+
+ PUT https://Domain Name/api/v1/roles/{roleId}/permissions
+PUT roles/8
+Content-Type: application/json
+Request body:
+{
+ADJUST_LOAN: "true",
+ALL_FUNCTIONS: "true",
+ALL_FUNCTIONS_READ: "true"
+}
+
+{
+ "entityId": 8
+}
+
+
+
+
+
@@ -3257,31 +3236,35 @@ Request body:
Example Requests:
permissions
-
permissions?fields=id,code
+
permissions?fields=grouping,code
GET https://Domain Name/api/v1/permissions
-[ {
- "id" : 1,
- "name" : "User administration ALL",
- "description" : "An application user will have permission to execute all tasks related to user administration.",
- "code" : "USER_ADMINISTRATION_SUPER_USER_ROLE"
-}, {
- "id" : 2,
- "name" : "Organisation adminsitration ALL",
- "description" : "An application user will have permission to execute all tasks related to organisation administration.",
- "code" : "ORGANISATION_ADMINISTRATION_SUPER_USER_ROLE"
-}, {
- "id" : 3,
- "name" : "Portfolio management ALL",
- "description" : "An application user will have permission to execute all tasks related to portfolio management.",
- "code" : "PORTFOLIO_MANAGEMENT_SUPER_USER_ROLE"
-}, {
- "id" : 4,
- "name" : "Reporting ALL",
- "description" : "An application user will have permission to execute and view all reports.",
- "code" : "REPORTING_SUPER_USER_ROLE"
-}, ... ]
+[
+ {
+ "grouping": "authorisation",
+ "code": "READ_PERMISSION",
+ "entityName": "PERMISSION",
+ "actionName": "READ",
+ "selected": true,
+ "isMakerChecker": false
+ },
+ {
+ "grouping": "authorisation",
+ "code": "CREATE_ROLE",
+ "entityName": "ROLE",
+ "actionName": "CREATE",
+ "selected": true,
+ "isMakerChecker": true
+ },
+ {
+ "grouping": "authorisation",
+ "code": "DELETE_ROLE",
+ "entityName": "ROLE",
+ "actionName": "DELETE",
+ "selected": true,
+ "isMakerChecker": true
+ }, ... ]
@@ -3320,7 +3303,8 @@ Request body:
| USER | users | Create a User | List Users | | |
| users/{userId} | | Retrieve a User | Update a User | Delete a User |
| ROLE | roles | Create a New Role | List Roles | | |
- | roles/{roleId} | | Retrieve a Role | Update a Role | |
+ | roles/{roleId} | | Retrieve a Role | Update a Role | |
+ | roles/{roleId}/permissions | | Retrieve a Role's Permissions | Update a Role's Permissions | |
| PERMISSION | permissions | | List Application Permissions | | |
@@ -3332,7 +3316,6 @@ Request body:
| offices/template | Retrieve Office Details Template |
| loanproducts/template | Retrieve Loan Product Details Template |
| users/template | Retrieve User Details Template |
- | roles/template | Retrieve Role Details Template |
diff --git a/mifosng-db/patches/patch-0018-add-maker-checker-flag-to-permissions.sql b/mifosng-db/patches/patch-0018-add-maker-checker-flag-to-permissions.sql
new file mode 100644
index 000000000..27499419f
--- /dev/null
+++ b/mifosng-db/patches/patch-0018-add-maker-checker-flag-to-permissions.sql
@@ -0,0 +1,13 @@
+
+ALTER TABLE m_permission
+ DROP COLUMN `default_name` ,
+ DROP COLUMN `default_description` ,
+ ADD COLUMN `is_maker_checker` TINYINT(1) NULL DEFAULT AFTER `action_name` ;
+
+update m_permission
+set is_maker_checker = false;
+
+update m_permission
+set is_maker_checker = true
+where grouping not in ('special', 'report')
+and action_name != 'READ';
\ No newline at end of file
diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/PermissionsApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/PermissionsApiResource.java
index c72675123..f05f66ed1 100644
--- a/mifosng-provider/src/main/java/org/mifosng/platform/api/PermissionsApiResource.java
+++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/PermissionsApiResource.java
@@ -11,7 +11,7 @@ import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriInfo;
-import org.mifosng.platform.api.data.PermissionData;
+import org.mifosng.platform.api.data.PermissionUsageData;
import org.mifosng.platform.api.infrastructure.PortfolioApiJsonSerializerService;
import org.mifosng.platform.infrastructure.api.ApiParameterHelper;
import org.mifosng.platform.security.PlatformSecurityContext;
@@ -46,7 +46,7 @@ public class PermissionsApiResource {
final Set responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
final boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
- final Collection permissions = this.permissionReadPlatformService.retrieveAllPermissions();
+ final Collection permissions = this.permissionReadPlatformService.retrieveAllPermissions();
return this.apiJsonSerializerService.serializePermissionDataToJson(prettyPrint, responseParameters, permissions);
}
diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/RolesApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/RolesApiResource.java
index 1e794be76..60013ecf6 100644
--- a/mifosng-provider/src/main/java/org/mifosng/platform/api/RolesApiResource.java
+++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/RolesApiResource.java
@@ -18,7 +18,6 @@ import javax.ws.rs.core.UriInfo;
import org.mifosng.platform.accounting.api.commands.RolePermissionCommand;
import org.mifosng.platform.api.data.CommandSourceData;
import org.mifosng.platform.api.data.EntityIdentifier;
-import org.mifosng.platform.api.data.PermissionData;
import org.mifosng.platform.api.data.PermissionUsageData;
import org.mifosng.platform.api.data.RoleData;
import org.mifosng.platform.api.data.RolePermissionsData;
@@ -77,24 +76,6 @@ public class RolesApiResource {
return this.apiJsonSerializerService.serializeRoleDataToJson(prettyPrint, responseParameters, roles);
}
- @GET
- @Path("template")
- @Consumes({MediaType.APPLICATION_JSON})
- @Produces({MediaType.APPLICATION_JSON})
- public String retrieveRoleTemplate(@Context final UriInfo uriInfo) {
-
- context.authenticatedUser().validateHasReadPermission(resourceNameForPermissions);
-
- final Set responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
- final boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
-
- final Collection allPermissions = this.permissionReadPlatformService.retrieveAllPermissions();
-
- final RoleData role = new RoleData(allPermissions, new ArrayList());
-
- return this.apiJsonSerializerService.serializeRoleDataToJson(prettyPrint, responseParameters, role);
- }
-
@POST
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
@@ -123,16 +104,10 @@ public class RolesApiResource {
final Set responseParameters = ApiParameterHelper.extractFieldsForResponseIfProvided(uriInfo.getQueryParameters());
final boolean prettyPrint = ApiParameterHelper.prettyPrint(uriInfo.getQueryParameters());
- final boolean template = ApiParameterHelper.template(uriInfo.getQueryParameters());
+
final Long commandId = ApiParameterHelper.commandId(uriInfo.getQueryParameters());
RoleData role = this.roleReadPlatformService.retrieveRole(roleId);
- if (template) {
- final Collection availablePermissions = this.permissionReadPlatformService.retrieveAllPermissions();
- availablePermissions.removeAll(role.selectedPermissions());
-
- role = new RoleData(role, availablePermissions);
- }
if (commandId != null) {
// currentChanges = handleRequestToIntegrateProposedChangesFromCommand(roleId, commandId);
}
diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/PermissionData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/PermissionData.java
deleted file mode 100644
index 9371596ff..000000000
--- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/PermissionData.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.mifosng.platform.api.data;
-
-/**
- * Immutable data object for permission data.
- */
-public class PermissionData {
-
- @SuppressWarnings("unused")
- private final Long id;
- @SuppressWarnings("unused")
- private final String name;
- @SuppressWarnings("unused")
- private final String description;
- private final String code;
-
- public PermissionData(final Long id, final String name, final String description, final String code) {
- this.id = id;
- this.name = name;
- this.description = description;
- this.code = code;
- }
-
- @Override
- public boolean equals(Object obj) {
- PermissionData data = (PermissionData) obj;
- return this.code.equalsIgnoreCase(data.code);
- }
-
- @Override
- public int hashCode() {
- return this.code.hashCode();
- }
-}
\ No newline at end of file
diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/PermissionUsageData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/PermissionUsageData.java
index c698983fc..7574524db 100644
--- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/PermissionUsageData.java
+++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/PermissionUsageData.java
@@ -5,27 +5,31 @@ package org.mifosng.platform.api.data;
*/
public class PermissionUsageData {
- @SuppressWarnings("unused")
- private final String grouping;
- @SuppressWarnings("unused")
- private final String code;
- @SuppressWarnings("unused")
- private final String entityName;
- @SuppressWarnings("unused")
- private final String actionName;
- @SuppressWarnings("unused")
- private final Boolean selected;
+ @SuppressWarnings("unused")
+ private final String grouping;
+ @SuppressWarnings("unused")
+ private final String code;
+ @SuppressWarnings("unused")
+ private final String entityName;
+ @SuppressWarnings("unused")
+ private final String actionName;
+ @SuppressWarnings("unused")
+ private final Boolean selected;
+ @SuppressWarnings("unused")
+ private final Boolean isMakerChecker;
public static PermissionUsageData from(final String permissionCode, final boolean isSelected) {
- return new PermissionUsageData(null, permissionCode, null, null, isSelected);
+ return new PermissionUsageData(null, permissionCode, null, null, isSelected, null);
}
- public PermissionUsageData(final String grouping, final String code, final String entityName, final String actionName,
- final Boolean selected) {
- this.grouping = grouping;
- this.code = code;
- this.entityName = entityName;
- this.actionName = actionName;
- this.selected = selected;
- }
+ public PermissionUsageData(final String grouping, final String code,
+ final String entityName, final String actionName,
+ final Boolean selected, final Boolean isMakerChecker) {
+ this.grouping = grouping;
+ this.code = code;
+ this.entityName = entityName;
+ this.actionName = actionName;
+ this.selected = selected;
+ this.isMakerChecker = isMakerChecker;
+ }
}
\ No newline at end of file
diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/RoleData.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/RoleData.java
index 9cb7b5a8c..9fdff46a4 100644
--- a/mifosng-provider/src/main/java/org/mifosng/platform/api/data/RoleData.java
+++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/data/RoleData.java
@@ -1,6 +1,5 @@
package org.mifosng.platform.api.data;
-import java.util.ArrayList;
import java.util.Collection;
/**
@@ -11,10 +10,6 @@ public class RoleData {
private final Long id;
private final String name;
private final String description;
-
- @SuppressWarnings("unused")
- private final Collection availablePermissions;
- private final Collection selectedPermissions;
// @SuppressWarnings("unused")
// private final Collection currentChanges;
@@ -23,32 +18,18 @@ public class RoleData {
this.id = id;
this.name = name;
this.description = description;
- this.availablePermissions = null;
- this.selectedPermissions = null;
}
- public RoleData(final Long id, final String name, final String description, final Collection selectedPermissions) {
- this.id = id;
- this.name = name;
- this.description = description;
- this.availablePermissions = null;
- this.selectedPermissions = selectedPermissions;
- }
-
- public RoleData(final Collection availablePermissions, final Collection selectedPermissions) {
+ public RoleData() {
this.id = null;
this.name = null;
this.description = null;
- this.availablePermissions = new ArrayList(availablePermissions);
- this.selectedPermissions = new ArrayList(selectedPermissions);
}
- public RoleData(final RoleData role, final Collection availablePermissions) {
+ public RoleData(final RoleData role) {
this.id = role.id;
this.name = role.name;
this.description = role.description;
- this.availablePermissions = availablePermissions;
- this.selectedPermissions = role.selectedPermissions;
}
@Override
@@ -62,10 +43,6 @@ public class RoleData {
return this.id.hashCode();
}
- public Collection selectedPermissions() {
- return this.selectedPermissions;
- }
-
public RolePermissionsData toRolePermissionData(final Collection permissionUsageData,
final Collection currentChanges,
final Collection> allChanges) {
diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonPortfolioApiJsonSerializerService.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonPortfolioApiJsonSerializerService.java
index de0d7e317..c22864d68 100644
--- a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonPortfolioApiJsonSerializerService.java
+++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/GoogleGsonPortfolioApiJsonSerializerService.java
@@ -14,6 +14,7 @@ import org.mifosng.platform.api.data.ClientAccountSummaryCollectionData;
import org.mifosng.platform.api.data.ClientData;
import org.mifosng.platform.api.data.ClientIdentifierData;
import org.mifosng.platform.api.data.CodeData;
+import org.mifosng.platform.api.data.CommandSourceData;
import org.mifosng.platform.api.data.ConfigurationData;
import org.mifosng.platform.api.data.DatatableData;
import org.mifosng.platform.api.data.DepositAccountData;
@@ -31,11 +32,10 @@ import org.mifosng.platform.api.data.LoanProductData;
import org.mifosng.platform.api.data.LoanReassignmentData;
import org.mifosng.platform.api.data.LoanScheduleData;
import org.mifosng.platform.api.data.LoanTransactionData;
-import org.mifosng.platform.api.data.CommandSourceData;
import org.mifosng.platform.api.data.NoteData;
import org.mifosng.platform.api.data.OfficeData;
import org.mifosng.platform.api.data.OfficeTransactionData;
-import org.mifosng.platform.api.data.PermissionData;
+import org.mifosng.platform.api.data.PermissionUsageData;
import org.mifosng.platform.api.data.RoleData;
import org.mifosng.platform.api.data.RolePermissionsData;
import org.mifosng.platform.api.data.SavingAccountData;
@@ -54,7 +54,7 @@ import com.google.gson.Gson;
@Service
public class GoogleGsonPortfolioApiJsonSerializerService implements PortfolioApiJsonSerializerService {
- private static final Set PERMISSION_DATA_PARAMETERS = new HashSet(Arrays.asList("id", "name", "description", "code"));
+ private static final Set PERMISSION_DATA_PARAMETERS = new HashSet(Arrays.asList("grouping", "code", "entityName", "actionName", "selected", "isMakerChecker"));
private static final Set ROLE_DATA_PARAMETERS = new HashSet(Arrays.asList("id", "name", "description",
"availablePermissions", "selectedPermissions"));
private static final Set ROLE_PERMISSION_DATA_PARAMETERS = new HashSet(Arrays.asList("id", "name", "description",
@@ -203,10 +203,10 @@ public class GoogleGsonPortfolioApiJsonSerializerService implements PortfolioApi
@Override
public String serializePermissionDataToJson(final boolean prettyPrint, final Set responseParameters,
- final Collection permissions) {
+ final Collection permissions) {
final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(PERMISSION_DATA_PARAMETERS,
prettyPrint, responseParameters);
- return helper.serializedJsonFrom(gsonDeserializer, permissions.toArray(new PermissionData[permissions.size()]));
+ return helper.serializedJsonFrom(gsonDeserializer, permissions.toArray(new PermissionUsageData[permissions.size()]));
}
@Override
diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/PortfolioApiJsonSerializerService.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/PortfolioApiJsonSerializerService.java
index 0900c8f43..94a8e6c01 100644
--- a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/PortfolioApiJsonSerializerService.java
+++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/PortfolioApiJsonSerializerService.java
@@ -33,7 +33,7 @@ import org.mifosng.platform.api.data.LoanTransactionData;
import org.mifosng.platform.api.data.NoteData;
import org.mifosng.platform.api.data.OfficeData;
import org.mifosng.platform.api.data.OfficeTransactionData;
-import org.mifosng.platform.api.data.PermissionData;
+import org.mifosng.platform.api.data.PermissionUsageData;
import org.mifosng.platform.api.data.RoleData;
import org.mifosng.platform.api.data.RolePermissionsData;
import org.mifosng.platform.api.data.SavingAccountData;
@@ -48,7 +48,7 @@ public interface PortfolioApiJsonSerializerService {
String serializeDatatableDataToJson(boolean prettyPrint, Collection result);
- String serializePermissionDataToJson(boolean prettyPrint, Set responseParameters, Collection permissions);
+ String serializePermissionDataToJson(boolean prettyPrint, Set responseParameters, Collection permissions);
String serializeRoleDataToJson(boolean prettyPrint, Set responseParameters, Collection roles);
diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/user/domain/Permission.java b/mifosng-provider/src/main/java/org/mifosng/platform/user/domain/Permission.java
index ab2dc353a..f8b85ad31 100644
--- a/mifosng-provider/src/main/java/org/mifosng/platform/user/domain/Permission.java
+++ b/mifosng-provider/src/main/java/org/mifosng/platform/user/domain/Permission.java
@@ -4,7 +4,6 @@ import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
-import org.mifosng.platform.api.data.PermissionData;
import org.springframework.data.jpa.domain.AbstractPersistable;
@Entity
@@ -18,12 +17,6 @@ public class Permission extends AbstractPersistable {
@Column(name = "code", nullable = false, length = 100)
private final String code;
- @Column(name = "default_name", nullable = false, length = 100)
- private final String defaultName;
-
- @Column(name = "default_description", nullable = false, length = 500)
- private final String defaultDescription;
-
@SuppressWarnings("unused")
@Column(name = "entity_name", nullable = true, length = 100)
private final String entityName;
@@ -31,12 +24,15 @@ public class Permission extends AbstractPersistable {
@SuppressWarnings("unused")
@Column(name = "action_name", nullable = true, length = 100)
private final String actionName;
-
+
+ @SuppressWarnings("unused")
+ @Column(name = "is_maker_checker", nullable = false)
+ private Boolean isMakerChecker;
+
+
protected Permission() {
this.grouping = null;
this.code = null;
- this.defaultDescription = null;
- this.defaultName = null;
this.entityName = null;
this.actionName = null;
}
@@ -49,7 +45,4 @@ public class Permission extends AbstractPersistable {
return this.code;
}
- public PermissionData toData() {
- return new PermissionData(this.getId(), this.defaultName, this.defaultDescription, this.code);
- }
}
\ No newline at end of file
diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/user/domain/Role.java b/mifosng-provider/src/main/java/org/mifosng/platform/user/domain/Role.java
index 5a7b27ea8..390758a95 100644
--- a/mifosng-provider/src/main/java/org/mifosng/platform/user/domain/Role.java
+++ b/mifosng-provider/src/main/java/org/mifosng/platform/user/domain/Role.java
@@ -1,6 +1,5 @@
package org.mifosng.platform.user.domain;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
@@ -14,7 +13,6 @@ import javax.persistence.ManyToMany;
import javax.persistence.Table;
import org.mifosng.platform.api.commands.RoleCommand;
-import org.mifosng.platform.api.data.PermissionData;
import org.mifosng.platform.api.data.RoleData;
import org.mifosng.platform.infrastructure.AbstractAuditableCustom;
@@ -75,13 +73,6 @@ public class Role extends AbstractAuditableCustom {
}
public RoleData toData() {
-
- final Collection rolePermissions = new ArrayList(this.permissions.size());
- for (Permission permission : this.permissions) {
- PermissionData permissionData = permission.toData();
- rolePermissions.add(permissionData);
- }
-
- return new RoleData(this.getId(), this.name, this.description, rolePermissions);
+ return new RoleData(this.getId(), this.name, this.description);
}
}
\ No newline at end of file
diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/user/service/PermissionReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosng/platform/user/service/PermissionReadPlatformService.java
index 43b1a319f..17de08dcc 100644
--- a/mifosng-provider/src/main/java/org/mifosng/platform/user/service/PermissionReadPlatformService.java
+++ b/mifosng-provider/src/main/java/org/mifosng/platform/user/service/PermissionReadPlatformService.java
@@ -2,12 +2,11 @@ package org.mifosng.platform.user.service;
import java.util.Collection;
-import org.mifosng.platform.api.data.PermissionData;
import org.mifosng.platform.api.data.PermissionUsageData;
public interface PermissionReadPlatformService {
- Collection retrieveAllPermissions();
+ Collection retrieveAllPermissions();
- Collection retrieveAllRolePermissions(Long roleId);
+ Collection retrieveAllRolePermissions(Long roleId);
}
\ No newline at end of file
diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/user/service/PermissionReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/user/service/PermissionReadPlatformServiceImpl.java
index d171a6236..7855b538e 100644
--- a/mifosng-provider/src/main/java/org/mifosng/platform/user/service/PermissionReadPlatformServiceImpl.java
+++ b/mifosng-provider/src/main/java/org/mifosng/platform/user/service/PermissionReadPlatformServiceImpl.java
@@ -4,9 +4,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
-import org.mifosng.platform.api.data.PermissionData;
import org.mifosng.platform.api.data.PermissionUsageData;
-import org.mifosng.platform.infrastructure.JdbcSupport;
import org.mifosng.platform.infrastructure.TenantAwareRoutingDataSource;
import org.mifosng.platform.security.PlatformSecurityContext;
import org.springframework.beans.factory.annotation.Autowired;
@@ -27,39 +25,22 @@ public class PermissionReadPlatformServiceImpl implements PermissionReadPlatform
}
@Override
- public Collection retrieveAllPermissions() {
+ public Collection retrieveAllPermissions() {
context.authenticatedUser();
-
- final PermissionMapper mapper = new PermissionMapper();
- final String sql = "select " + mapper.schema() + " order by p.id";
+
+ final PermissionUsageDataMapper mapper = new PermissionUsageDataMapper();
+ final String sql = mapper.permissionSchema();
return this.jdbcTemplate.query(sql, mapper, new Object[] {});
}
- private static final class PermissionMapper implements RowMapper {
-
- @Override
- public PermissionData mapRow(final ResultSet rs, @SuppressWarnings("unused") final int rowNum) throws SQLException {
-
- final Long id = JdbcSupport.getLong(rs, "id");
- final String name = rs.getString("name");
- final String description = rs.getString("description");
- final String code = rs.getString("code");
-
- return new PermissionData(id, name, description, code);
- }
-
- public String schema() {
- return " p.id as id, p.default_name as name, p.default_description as description, p.code as code from m_permission p ";
- }
- }
@Override
public Collection retrieveAllRolePermissions(final Long roleId) {
final PermissionUsageDataMapper mapper = new PermissionUsageDataMapper();
- final String sql = mapper.schema();
+ final String sql = mapper.rolePermissionSchema();
return this.jdbcTemplate.query(sql, mapper, new Object[] { roleId });
}
@@ -74,15 +55,23 @@ public class PermissionReadPlatformServiceImpl implements PermissionReadPlatform
final String entityName = rs.getString("entityName");
final String actionName = rs.getString("actionName");
final Boolean selected = rs.getBoolean("selected");
+ final Boolean isMakerChecker = rs.getBoolean("isMakerChecker");
- return new PermissionUsageData(grouping, code, entityName, actionName, selected);
+ return new PermissionUsageData(grouping, code, entityName, actionName, selected, isMakerChecker);
}
- public String schema() {
- return "select p.grouping, p.code, p.entity_name as entityName, p.action_name as actionName, if(isnull(rp.role_id), false, true) as selected "
- + "from m_permission p "
- + "left join m_role_permission rp on rp.permission_id = p.id and rp.role_id = ? "
- + "order by p.grouping, ifnull(entity_name, ''), p.code";
+ public String permissionSchema() {
+ return "select p.grouping, p.code, p.entity_name as entityName, p.action_name as actionName, true as selected, p.is_maker_checker as isMakerChecker"
+ + " from m_permission p "
+ + " order by p.grouping, ifnull(entity_name, ''), p.code";
+ }
+
+ public String rolePermissionSchema() {
+ return "select p.grouping, p.code, p.entity_name as entityName, p.action_name as actionName, if(isnull(rp.role_id), false, true) as selected, "
+ + " if(isnull(rp.role_id), false, p.is_maker_checker) as isMakerChecker "
+ + " from m_permission p "
+ + " left join m_role_permission rp on rp.permission_id = p.id and rp.role_id = ? "
+ + " order by p.grouping, ifnull(entity_name, ''), p.code";
}
}