package com.hrms.dao.impl;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.annotation.Resource;
import org.springframework.stereotype.Repository;
import com.hrms.dao.IModuleDao;
import com.hrms.dao.IRolePermissionDao;
import com.hrms.dao.IUserDao;
import com.hrms.dao.IUserPermissionDao;
import com.hrms.model.Role;
import com.hrms.model.User;
import com.hrms.model.UserPermission;
@Repository("userPermissionDao")
public class UserPermissionDaoImpl extends GenericDaoImpl<UserPermission, Integer> implements
IUserPermissionDao {
private IModuleDao moduleDao;
private IUserDao userDao;
private IRolePermissionDao rolePermissionDao;
public boolean checkPermission(String userId,String moduleId,String actionId) {
if (userId!=null && userId.trim()!="" && moduleId!=null && moduleId.trim()!="" && actionId!=null && actionId.trim()!="") {
Integer checked = checked(Integer.valueOf(userId),Integer.valueOf(moduleId),Integer.valueOf(actionId));
if (checked>0) {
return true;
}else if(checked<0) {
return false;
}else if(checked== null || checked == 0) {
User user = userDao.findById(Integer.valueOf(userId));
Set<Role> roles = user.getRoles();
Iterator<Role> iterator = roles.iterator();
while(iterator.hasNext()) {
if(rolePermissionDao.checked(iterator.next().getRoleId(), Integer.valueOf(moduleId), Integer.valueOf(actionId))>0) {
return true;
}else {
return false;
}
}
}
}
return false;
}
@SuppressWarnings("unchecked")
public boolean saveOrUpdate(Integer userId,Integer moduleId,String actionIds,String permission) {
if (userId!=null && userId>0 && moduleId!=null && moduleId>0) {
Integer[] id = {userId,moduleId};
UserPermission userPermission;
List<UserPermission> userPermissions = getHibernateTemplate().find("from UserPermission where userId=? and moduleId=?",id);
if (userPermissions!=null && userPermissions.size()>0) {
userPermission = userPermissions.get(0);
}else {
userPermission = new UserPermission();
userPermission.setUser(userDao.findById(userId));
userPermission.setModule(moduleDao.findById(moduleId));
}
userPermission.setActionIds(actionIds);
userPermission.setPermission(permission);
return this.saveOrUpdate(userPermission);
}
return false;
}
@SuppressWarnings("unchecked")
public Integer checked(Integer userId,Integer moduleId,Integer actionId) {
if (userId!=null && userId>0 && moduleId!=null && moduleId>0 && actionId!=null&&actionId>0) {
Integer[] id = {userId,moduleId};
List<UserPermission> userPermissions = getHibernateTemplate().find("from UserPermission where userId=? and moduleId=?",id);
if (userPermissions!=null && userPermissions.size()>0) {
UserPermission userPermission = userPermissions.get(0);
String[] actionIdString = userPermission.getActionIds().split(",");
String[] permissionString = userPermission.getPermission().split(",");
for (int i = 0; i < actionIdString.length; i++) {
if (actionIdString[i].equals(actionId.toString())&& permissionString[i]!=null) {
return Integer.valueOf(permissionString[i]);
}
}
}
}
return 0;
}
public IModuleDao getModuleDao() {
return moduleDao;
}
@Resource
public void setModuleDao(IModuleDao moduleDao) {
this.moduleDao = moduleDao;
}
public IUserDao getUserDao() {
return userDao;
}
@Resource
public void setUserDao(IUserDao userDao) {
this.userDao = userDao;
}
public IRolePermissionDao getRolePermissionDao() {
return rolePermissionDao;
}
@Resource
public void setRolePermissionDao(IRolePermissionDao rolePermissionDao) {
this.rolePermissionDao = rolePermissionDao;
}
}