package org.mifos.security.rolesandpermission.authorization;
import java.io.Serializable;
import org.mifos.core.MifosRuntimeException;
import org.mifos.framework.exceptions.ApplicationException;
import org.mifos.framework.exceptions.SystemException;
import org.mifos.security.rolesandpermission.authorization.permissions.MaxLoanAmountForApprovePermission;
import org.mifos.security.rolesandpermission.authorization.permissions.MifosPermission;
import org.springframework.security.access.PermissionEvaluator;
import org.springframework.security.core.Authentication;
import org.springframework.transaction.annotation.Transactional;
/**
* Custom Mifos PermissionEvaluator.
* See http://static.springsource.org/spring-security/site/docs/3.1.x/reference/el-access.html#el-permission-evaluator
*/
public class MifosPermissionEvaluator implements PermissionEvaluator {
public MifosPermissionEvaluator() {
super();
}
@Override
@Transactional
public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) {
try {
return checkPermission(authentication, targetDomainObject, permission);
} catch (SystemException e) {
throw new MifosRuntimeException(e);
} catch (ApplicationException e) {
throw new MifosRuntimeException(e);
}
}
@Override
@Transactional
public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType,
Object permission) {
return false;
}
public boolean checkPermission(Authentication authentication, Object targetDomainObject, Object permissionName) throws SystemException, ApplicationException{
MifosPermission permission = MifosPermissionFactory.getPermissionClass(permissionName);
return permission.isAllowed(authentication, targetDomainObject);
}
}