【问题标题】:Android;manage UI controls according RBACAndroid;根据 RBAC 管理 UI 控件
【发布时间】:2015-01-19 15:12:15
【问题描述】:

在一个项目中,我有 3 个 Actors 和 5 个用例。我想根据 Actors 的角色(RBAC)来规范 Actors 对实体的访问。所有 Actors 都看到相同的 UI,但是根据每个 Actors 禁用了一些 UI 控件他/她的角色。我可以使用 If 语句来决定必须为当前 Actor 启用还是禁用特定控件?例如:

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

这是可能的,但是 UI 很复杂,并且每个布局都有许多 UI 控件。因此,在应用程序中管理所有这些可能的选项和对逻辑进行硬编码似乎令人生畏。特别是,用例、参与者及其权限的数量可能会发生变化稍后。你知道我怎样才能避免硬编码这样的逻辑并有一个好的设计吗?

【问题讨论】:

    标签: android user-interface design-patterns rbac


    【解决方案1】:

    恕我直言,最好为每个角色创建单独的 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;
    }
    

    虽然,这只是获取基于角色的菜单的一种方式。您仍然应该对所有已执行操作的授权进行良好的后台验证。为此,您还可以创建一个助手,将当前用户的角色与允许的操作相匹配,以查看他是否被允许做他正在做的事情。

    【讨论】:

      猜你喜欢
      • 2017-03-19
      • 2017-02-13
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 2016-07-31
      相关资源
      最近更新 更多