zoukankan      html  css  js  c++  java
  • 权限设计(下)

    什么是权限管理

    一般来说,只要有用户参与的系统,那么都要有权限管理,尤其是一些后台的管理系统,

    权限管理可以实现对用户访问系统的控制,按照安全规则或者相关策略的控制,可以使用户访问到只属于自己被授权的相关(比如菜单,或者页面资源)

    权限管理包括用户认证和授权两模块

    用户认证

    用户认证,说白了就是登录的时候进行的验证,验证用户身份合法性。

    最常见的用户身份验证的方式:

    1、用户名 + 密码

    2、手机号 + 验证码

    3、证书验证

    来看一下流程图:

     

    用户授权

    用户授权,浅白点讲就是权限访问控制,在用户认证通过后,系统对用户访问资源进行控制,用户具有资源的访问权限方可访问对于的资源

    数据库模型

    上篇文章中讲到了5张表,其实是由6张表而来,但是由于第六章表资源是可以整合的,所以可以避免冗余而采用了5张表,最简单的权限控制是至少由5张表来构成的

    主体(账号、密码)

    权限(权限名称、资源名称、资源访问地址)

    角色(角色名称)

    角色和权限关系(角色id、权限id

    主体和角色关系(主体id、角色id

    分配权限

    用户需要被分配到相应的权限才可访问相应的资源,这些权限信息需要保存

    把用户信息、权限管理、用户分配的权限信息写到数据库(权限数据模型)

    基于角色的访问控制

    就是判断用户是否是项目经理还是普通员工,访问的资源就不同

    比如

    if (user.role = [pm]) {

    // 访问

    }

    if (user.role != [pm]) {

    // 访问

    }

    这么做没问题,但是不容易维护,一旦权限变更,那么就要变更代码

    基于资源的访问控制

    if (user have [pm]) {

    // 访问

    } else if (user have [boss]) {

    // 访问

    }

    这么做只要针对user配置权限,把对应的资源给他,那么就能访问,不需要每次修改代码,增加了可维护性

    基于url拦截的方式实现

    举个栗子:使用springMVC拦截器实现

    拦截对应url,url配置一个私有拦截list,拦截到的list必须进行验证,

    进入拦截器验证后查看是否存在token信息,如果不存在,拦截返回到web登录页面,或者json错误信息给手机端

    同时验证的时候针对资源,需要判断是否能够访问,可以第一次查询数据库的资源信息缓存到session或者redis中

    使用权限管理框架实现

    1、spring security (目前连spring自己都抛弃了这个框架,因为太重了,现在拥抱了Apache Shiro)

    2、Shiro (to be continued...)

  • 相关阅读:
    Linux操作_常用命令操作练习
    Linux编程_Shell脚本练习题
    Linux操作_grep/egrep工具的使用
    Linux中的链接文件_软链接和硬链接
    Linux操作_磁盘管理_增加虚拟磁盘
    Linux命令_磁盘管理_查看磁盘或目录的容量
    Linux命令_用户身份切换
    使用Unity中的Box Collider组件完成游戏场景中的碰撞检测功能
    在Unity场景中更改天空盒的步骤
    Linux命令_用户和用户组管理
  • 原文地址:https://www.cnblogs.com/leechenxiang/p/5561692.html
Copyright © 2011-2022 走看看