SessionHandlerBean.java 2.19 KB
package fi.insomnia.bortal.beans;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import fi.insomnia.bortal.RolePermission;
import fi.insomnia.bortal.SessionHandlerBeanLocal;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.RoleRight;
import fi.insomnia.bortal.model.User;

/**
 * Session Bean implementation class SessionHandlerBean
 */
@Stateless
public class SessionHandlerBean implements SessionHandlerBeanLocal {

    @EJB
    private UserFacade userfacade;

    /**
     * Default constructor.
     */
    public SessionHandlerBean() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public boolean hasPermission(String target, User user, RolePermission permission) {
        User dbusr = userfacade.find(user.getId());
        Set<Role> checkedRoles = new HashSet<Role>();
        for (Role r : dbusr.getRoles()) {
            if (getRights(r, target, permission, checkedRoles)) {
                return true;
            }

        }
        return false;
    }

    private static boolean getRights(Role role,String target,RolePermission permission, Set<Role> checkedRoles) {

        if(checkedRoles.contains(role))
        {
            return false;
        }
        
        for (RoleRight rr : role.getRoleRights()) {
            if (rr.getAccessRight().getAccessRight().equals(target)) {
                switch (permission) {
                case READ:
                    if (rr.getRead()) {
                        return true;
                    }
                    break;
                case WRITE:
                    if (rr.getWrite()) {
                        return true;
                    }
                    break;
                case EXECUTE:
                    if (rr.isExecute()) {
                        return true;
                    }
                }
            }
        }
        checkedRoles.add(role);

        for (Role r : role.getParents()) {
            if(getRights(r,target,permission,checkedRoles))
            {
                return true;
            }
            
        }
        return false;
        
    }
}