Android 不同的用户看到不同的页面(权限控制)?
我想让不同的用户组看到不同的页面。比如:
有4个Fragment A B C D,Admin组能看到所有,Senior组能看到A B C,Junior组只能看到A B。
由于每个客户的数据库是独立的,所以没法像Web那样直接在数据库里创建 用户-权限 表。否则一旦APP发生改动,每一个库里的 用户-权限 表就都得跟着改,这不现实。
我的想法:
在 MyApplication.java 里,创建 Map<String, List<String>>. Key是用户组名,Value是该组所能看到的 List<Fragment名>
用户登录后,我就能知道用户属于哪个组,然后利用反射来实例化Fragments:
Class clazz = Class.forName("Fragment names in the List"); Fragment fragment = (Fragment) clazz.newInstance();
请问这样是否可行?有没有其他更好的方案?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
你的这个思路很好。
但
会在登陆后占用很长时间。
建议思路:
启动时加载全部Fragment
登陆时判断权限
设计多个button控制Fragment进入权限,如Fragment1,Fragment2……
根据权限设置button加载(实例化button比Fragment要快)
把Authority<-->Fragment对应map改成Authority<-->Button对应map。
可以给你讲下我们app的权限设计,很明显,你没有考虑到一些譬如,某个按钮存在A B C界面,但是不同的用户点击的业务都是不一样的,可以用状态模式,一个接口定义所有和权限有关的操作,然后不同权限类实现此接口,比如A按钮,可能管理员权限下就是修改打开界面,但是游客权限下就是调整登录页面
如果用户组和界面(Fragment)的映射关系是固定不变的话,可以这么做。
另外建议只是需要建立用户组名和界面映射的话,直接用 Map<String, List<Class<? extends Fragment>> 来存储 Fragment 的 Class 对象就好了,反射的话不得不要进行混淆过滤,用字符串硬编码类名对协作重构都不是很友好。
我觉得也没有你想的那么复杂,fragment可以不用变,就是把abcd四个的数据加载出来,对应不同的权限,然后加载相应的fragment个数,再去加载对应的数据,这样说不知道能理解吗