@Transactional // @Secured("ROLE_USER") public void createTransaction(BankingTx tx) { // add due to no insert trigger in sql server if (SobaConfig.getDatabaseVendor().equalsIgnoreCase("SQLServer")) { // System.out.println ("database vendor is SQL Server"); double balance = accountManager.updateAccountBalance(tx.getAmount(), tx.getAccountId()); tx.setBalance(balance); } aclBankingTxDao.insert(tx); addPermission(tx, new PrincipalSid(getCustomerUsername(tx)), BasePermission.READ); addPermission(tx, new GrantedAuthoritySid("ROLE_REP"), BasePermission.ADMINISTRATION); addPermission(tx, new GrantedAuthoritySid("ROLE_REP"), BasePermission.DELETE); }
@Transactional public void reverseTransaction(String txId) { BankingTx tx = aclBankingTxDao.findByTransactionID(txId); tx.setAmount(-tx.getAmount()); tx.setDescription("Reversed: " + " amount = " + tx.getAmount() + " for " + tx.getDescription()); tx.setTransactionId(Long.parseLong((new RandomID(9)).getId())); tx.setTransDate(new Timestamp(System.currentTimeMillis())); aclBankingTxDao.insert(tx); addPermission(tx, new PrincipalSid(getCustomerUsername(tx)), BasePermission.READ); addPermission(tx, new GrantedAuthoritySid("ROLE_REP"), BasePermission.ADMINISTRATION); addPermission(tx, new GrantedAuthoritySid("ROLE_REP"), BasePermission.DELETE); }
public void addPermission(BankingTx tx, Sid recipient, Permission permission) { MutableAcl acl; ObjectIdentity oid = new ObjectIdentityImpl(BankingTx.class, tx.getId()); try { acl = (MutableAcl) mutableAclService.readAclById(oid); } catch (NotFoundException nfe) { System.out.println("oid=" + oid.toString()); acl = mutableAclService.createAcl(oid); } acl.insertAce(acl.getEntries().size(), permission, recipient, true); mutableAclService.updateAcl(acl); }
public void deletePermission(BankingTx tx, Sid recipient, Permission permission) { ObjectIdentity oid = new ObjectIdentityImpl(BankingTx.class, tx.getTransactionId()); MutableAcl acl = (MutableAcl) mutableAclService.readAclById(oid); // Remove all permissions associated with this particular recipient (string equality to KISS) List<AccessControlEntry> entries = acl.getEntries(); for (int i = 0; i < entries.size(); i++) { if (entries.get(i).getSid().equals(recipient) && entries.get(i).getPermission().equals(permission)) { acl.deleteAce(i); } } mutableAclService.updateAcl(acl); }
private String getCustomerUsername(BankingTx tx) { String username = ""; String authority = SecurityContextHolder.getContext().getAuthentication().getAuthorities().toString(); if (authority.contains("ROLE_CUST")) { Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); if (principal instanceof UserDetails) { username = ((UserDetails) principal).getUsername(); } else { username = principal.toString(); } } else { String accountId = tx.getAccountId(); String customerId = accountDao.getCustomerId(accountId); username = loginUserDao.getUsernameByCustomerId(customerId); } return username; }