summer914 2015-10-13 16:20:52 4883次浏览 5条回复 0 0 0
这段时间在做一个比较大的系统涉及严格的权限控制,系统的menu都是权限判断后动态生成,目前我们采取的一个比较苦逼的方法是render把menu参数传到views层,然后$this->_menu输出,这样写起来简单,可是每次跳转到新的页面都需要加载相应的controller和rest API重新生成,加载的速度慢性能不佳,故在思考如何静态化这个menu的问题。

方式一:用ajax做页面的局部加载 方式二:用iframe标签,把菜单和body分成两个页面 方式三:controller生成_menu数据后存到一个json或者JavaScript文件中,一类用户对应一个文件,controller端判断出用户的角色组后告诉前端该调用哪个文件,这样也不需要去刷数据库每次就快多了。 然而这个我自认为是最好的方法被老大否决了(流泪),方式一和方式二都导致前端做大改,然而这次系统的前端是我做,(再次流泪)。

小伙伴们还有啥好方法没,大家伙一起聊聊呗,这样显而易见的问题,搞不好你老板下次就让你做了,恩,苦笑了一下

  • 回复于 2015-10-13 19:29 举报

    用widget把这个菜单模块化
    在第一次加载的时候根据用户身份生成菜单 然后静态化 添加缓存标识
    如果用户身份变了 再次生成 如果没变 就直接读取静态化的
    这个怎么样

  • 回复于 2015-10-13 21:03 举报

    yii2框架有提供 httpCachepageCache;

    或者你自己手动缓存一下.

  • 回复于 2015-10-14 00:07 举报

    方式三有个坑,如果以后需求,能够在角色之外给某个用户独立权限的时候,就抓瞎了。

    2 条回复
    回复于 2015-10-14 10:08 回复

    这样意味着他已经脱离原用户组,给他单独建个用户组咯

    回复于 2015-10-14 12:55 回复

    恩,也不错。

  • 回复于 2015-10-14 00:47 举报

    我现在做SPA 只做数据层面的静态,渲染层面完全不考虑 交给 angularJS 还是蛮轻松的。

    根据你的情况建议如果不能改变project mode就考虑登录之后缓存或者更新,严格意义上讲这个只设计diaplay 问题不大,真正的权限判断还是在php代码里。

  • 回复于 2016-11-18 16:45 举报

    之前有做过类似的,只是没有用yii,用的是session,在用户登录的时候查看用户的权限,把权限写在session里面,这样也页面之间就通用了,也不用再次加载

您需要登录后才可以回复。登录 | 立即注册