Android 不同的用户看到不同的页面(权限控制)?

发布于 2022-09-05 01:38:06 字数 562 浏览 19 评论 0

我想让不同的用户组看到不同的页面。比如:

有4个Fragment A B C D,Admin组能看到所有,Senior组能看到A B C,Junior组只能看到A B。

由于每个客户的数据库是独立的,所以没法像Web那样直接在数据库里创建 用户-权限 表。否则一旦APP发生改动,每一个库里的 用户-权限 表就都得跟着改,这不现实。

我的想法:

  1. 在 MyApplication.java 里,创建 Map<String, List<String>>. Key是用户组名,Value是该组所能看到的 List<Fragment名>

  2. 用户登录后,我就能知道用户属于哪个组,然后利用反射来实例化Fragments:

    
    Class clazz = Class.forName("Fragment names in the List");
    Fragment fragment = (Fragment) clazz.newInstance();
    

请问这样是否可行?有没有其他更好的方案?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

拔了角的鹿 2022-09-12 01:38:07

你的这个思路很好。

Fragment fragment = (Fragment) clazz.newInstance();

会在登陆后占用很长时间。

建议思路:

  1. 启动时加载全部Fragment

  2. 登陆时判断权限

  3. 设计多个button控制Fragment进入权限,如Fragment1,Fragment2……

  4. 根据权限设置button加载(实例化button比Fragment要快)

把Authority<-->Fragment对应map改成Authority<-->Button对应map。

枉心 2022-09-12 01:38:07

可以给你讲下我们app的权限设计,很明显,你没有考虑到一些譬如,某个按钮存在A B C界面,但是不同的用户点击的业务都是不一样的,可以用状态模式,一个接口定义所有和权限有关的操作,然后不同权限类实现此接口,比如A按钮,可能管理员权限下就是修改打开界面,但是游客权限下就是调整登录页面

掩饰不了的爱 2022-09-12 01:38:07

如果用户组和界面(Fragment)的映射关系是固定不变的话,可以这么做。

另外建议只是需要建立用户组名和界面映射的话,直接用 Map<String, List<Class<? extends Fragment>> 来存储 Fragment 的 Class 对象就好了,反射的话不得不要进行混淆过滤,用字符串硬编码类名对协作重构都不是很友好。

梦途 2022-09-12 01:38:07

我觉得也没有你想的那么复杂,fragment可以不用变,就是把abcd四个的数据加载出来,对应不同的权限,然后加载相应的fragment个数,再去加载对应的数据,这样说不知道能理解吗

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文