2013-07-08 5 views
0

Я новичок в мире программирования, и мне это нравится.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>(); 

ответ

0

EDIT: Обновлено предложение.

Если в настоящее время для супервизора вы можете правильно получить список всех сотрудников, которые имеют его в качестве наблюдателя, то просто добавьте электронное письмо супервизора также в список, который вы будете использовать в качестве фильтра для запроса истории отпуска. Таким образом, после нахождения списка писем сотрудников, а также добавить:

list.add(emailAddress); //since emailAddress will be the email of the supervisor 
+0

Дорогой Тони, спасибо за ваше предложение, я испытал его, теперь он стал супервизором только просматривать собственную историю отпуска, но не работник под он/она – user1944535

+0

можете ли вы проверить свой тестовый пример, проверяете ли вы случай, когда никто не находится под наблюдением –

Смежные вопросы