Я новичок в мире программирования, и мне это нравится.Query.FilterOperator для разных ролей
У меня есть некоторые проблемы с Query.Filter Operator различными ролями.
- Администратор - Администратор может просматривать все оставить историю
- Supervisor - Супервизор может просматривать собственные и все работника под он/она
- Employee - Служащий только просматривать собственную историю отпуска
С тестирование я сделал. Администратор и Сотрудник работает нормально, и проблема, с которой я столкнулся, - Супервизор, Супервизор, способный просматривать сотрудника под себя, но не в состоянии просмотреть информацию о себе..
вот часть кода, ценю, что кто-то может мне помочь. Спасибо
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
log.debug(ViewHistory.class);
DataTableModel dataTableModel = DataTablesUtility.getParam(request);
String regionSelected = request.getParameter("cri_region");
String sEcho = dataTableModel.sEcho;
int iTotalRecords = 0; // total number of records (unfiltered)
int iTotalDisplayRecords = 0; //value will be set when code filters companies by keyword
JsonArray data = new JsonArray(); //data that will be shown in the table
String emailAddress = (String)request.getSession().getAttribute("emailAdd");
Boolean isAdmin = false;
Boolean isSupervisor = false;
AdministratorService as = new AdministratorService();
for(Administrator admin : as.getAdministrators()){
if(admin.getEmailAddress().equalsIgnoreCase(emailAddress)){
isAdmin = true;
}
}
SupervisorService ss = new SupervisorService();
for(Supervisor s : ss.getSupervisors()){
if(s.getEmailAddress().equalsIgnoreCase(emailAddress)){
isSupervisor = true;
}
}
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Query q = new Query(History.class.getSimpleName());
// only admin can view all leave history
if(!isAdmin && !isSupervisor){
Filter emailFilter = new FilterPredicate("emailAdd",
FilterOperator.EQUAL,
emailAddress);
Filter regionFilter = new FilterPredicate("region",
FilterOperator.EQUAL,
StringUtils.defaultString(regionSelected, "Singapore"));
Filter filter = CompositeFilterOperator.and(emailFilter, regionFilter);
q.setFilter(filter);
}
else if(!isAdmin && isSupervisor){
List<String> list = new ArrayList<String>();
EmployeeService es = new EmployeeService();
for(Employee emp : es.getEmployees()){
if(emailAddress.equalsIgnoreCase(emp.getSupervisor())){
list.add(emp.getEmailAddress());
}
}
// if some one under this supervisor
if(list != null && !list.isEmpty()){
Filter filter = new FilterPredicate("emailAdd",
FilterOperator.IN,
list);
q.setFilter(filter);
}
else{
// if not one under this supervisor , put update it self to avoid illegal argument
Filter filter = new FilterPredicate("emailAdd",
FilterOperator.EQUAL,
emailAddress);
q.setFilter(filter);
}
}
List<History> historyList = new LinkedList<History>();
List<History> entityList = new LinkedList<History>();
Дорогой Тони, спасибо за ваше предложение, я испытал его, теперь он стал супервизором только просматривать собственную историю отпуска, но не работник под он/она – user1944535
можете ли вы проверить свой тестовый пример, проверяете ли вы случай, когда никто не находится под наблюдением –