2015-01-19 3 views
0

В проекте у меня есть 3 актера и 5 случаев использования. Я хочу регулировать доступ актеров к объектам на основе их ролей (RBAC). Также все участники видят один и тот же интерфейс, но некоторые элементы интерфейса пользователя отключены для каждого актора в соответствии с его/ее ролью. Я могу использовать инструкции If, чтобы решить, какой конкретный контроль должен быть включен для текущего Актера или отключен? Например:Android, управление элементами пользовательского интерфейса по RBAC

If (User.Roles(...)) 
{ 
    btnEditOrder.enabled = false; 
} 

Это возможно, но пользовательский интерфейс является сложным, и каждый макет имеет много UI controls.So управляя все эти возможные варианты и жесткий код, логика приложения кажется daunting.Specially, число случаев использования , участники и их разрешения могут измениться позже. Вы знаете, как я могу избежать такой логики и иметь хороший дизайн?

ответ

0

IMHO было бы полезно создать отдельные файлы menu.xml для каждой роли.

Допустим, вы делаете отдельные menu.xml файлы, а именно:

  1. options_menu_manager.xml
  2. options_menu_engineer.xml
  3. options_menu_director.xml

Вам нужно будет сделать класс Helper вокруг него. Я предполагаю, что у вас есть роль уже в памяти, вы можете сделать что-то вроде:.

class Helper{ 

    public static int getOptionsMenu(){ 
     switch(Global.role){ 
      case Constants.MANAGER: 
       return R.menu.options_menu_manager.xml; 
      ... 
      ...  
     } 
    } 
} 

и везде, где вам нужно, чтобы получить меню, вы можете использовать вспомогательную функцию вместо того, чтобы использовать R.menu файл * ,

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(Helper.getOptionsMenu(), menu); 
    return true; 
} 

Хотя, это всего лишь способ получить меню на основе ROLE. Вы все равно должны иметь хорошую проверку фона для авторизации всех выполненных действий. Для этого вы также можете создать помощник, который соответствует роли текущего пользователя в отношении разрешенных действий, чтобы увидеть, разрешено ли ему делать то, что он делает, или нет.

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