美文网首页
基于Shiro的administrator权限管理系统的初步分析

基于Shiro的administrator权限管理系统的初步分析

作者: 已迁至知乎_此不再维护 | 来源:发表于2018-06-29 16:45 被阅读0次

    模型

    基础模型共有三个概念:

    • 用户
    • 角色
    • 菜单

    用户与角色是一对多的关系,角色与菜单是一对多的关系。

    角色

    角色是中间过渡层,某个登录的用户,通过用户唯一标识(判断用户承担哪些角色),判断具有哪些权限,进而确定其能执行哪些操作(访问哪些资源)

    菜单

    在administrator项目中,菜单共分为三类,如下:

    • 目录(无页面指向,无权限依附)
    • 菜单(有页面指向,无权限依附)
    • 按钮(无页面指向,有权限依附)

    按钮

    按可见性分,按钮分为两类,一类是看的见的按钮,一类是看不见的按钮。

    • 看的见的按钮,称之为功能性按钮,每一个功能性按钮都应该在权限系统中注册;
    • 看不见的按钮在页面中不体现,但用于被权限依附。(特指【查看】按钮)。

    模型实现

    模型在项目中通过5张关系表来实现:

    1. 用户表sys_user(主键、用户名、密码(密)、盐)
    2. 角色表sys_role(主键、名称、备注)
    3. 用户角色关系表sys_user_role(主键、用户主键、角色主键)
    4. 菜单表sys_menu(主键、父键、名称、指向、权限、类型、图片、排序)
    5. 角色菜单关系表sys_role_menu(主键、角色主键、菜单主键)

    职责分配

    Shiro的职责是,对每一个操作请求(及资源访问请求),验证请求者是否具备对应的权限。“权限”这个概念在项目中的具体落地则是指唯一的字符串。由于项目庞大,权限较多,因此需要采用冒号分隔法来体现权限的层级结构。

    为了排除一些不需要验证的的操作请求(及资源访问请求),Shiro提供了过滤器支持。具体如何配置及使用可参见官网。

    对于Shiro的session管理、缓存管理等其他方面的知识,时常参考官网及imooc网站进行学习。

    开发者的职责是:

    1. 负责向Shiro提供其需要的Realm。Realm存储了合法用户有哪些,权限定义了多少个,及用户与权限的对应关系(需通过角色层过渡)。
    2. 在定义一个接口时,需要定义对应的权限,这个权限最终要依附于“按钮”进行分配。这个按钮可以在界面上体现(可点击),也可以不在界面上体现(只用于管理员分配)

    原则上讲,可点击按钮对应的接口权限必须依附于对应的按钮,而其他跨表接口的权限则可以统一写入页面对应的【查看】按钮不可见按钮中。(减少一个权限对应一个按钮的实际操作的复杂度)

    总结

    下面总结一下在实际开发过程中,对于权限分配的可操作步骤:

    后端开发程序员(写接口时),在文档中应说明调用该接口应具备的权限(字符串)

    前端开发程序员(写页面和js的),在界面中调用的每一个接口,都应判断该接口的调用是否需要权限。如果需要权限,则应通过后台管理系统将权限分配给对应的按钮上。(实体按钮)(虚拟按钮)

    后记

    当用户登录成功之后,页面会缓存该用户的所具备的权限列表(由服务器返回),页面根据权限的有无来确定菜单(包括目录、菜单、按钮)的显示与否。

    Realm中存储的权限用于比对,即使前端页面通过非法手段在缓存的权限列表中增加了部分假权限,进而看到了被隐藏的按钮,但到服务端的时候依然验证不过。

    相关文章

      网友评论

          本文标题:基于Shiro的administrator权限管理系统的初步分析

          本文链接:https://www.haomeiwen.com/subject/zxiayftx.html