web权限管理

来源:互联网 发布:深q网络模型 编辑:程序博客网 时间:2024/06/05 15:45
什么是权限管理:对用户访问系统进行控制,按照安全规则、安全策略控制用户只能访问被授权的资源,一般包含认证授权两部分。

权限管理基本流程图


用户认证:验证用户身份的合法性,即用户登录,常用的身份认证方法:1.帐号密码 2.指纹 3.证书

用户认证的相关概念

subject:主体,可以是用户,也可以是程序来访问我们的系统资源
principal:身份信息(帐号),通常是唯一的,一个主体可以拥有多个身份信息,比如邮箱帐号,手机帐号,QQ帐号等,但只有一个主身份信息(primary principal)
credential:凭证,可以是密码、证书、指纹

用户授权:简单理解为访问控制,具有某种资源对应的权限才可以访问该资源

用户授权的相关概念

资源:resource,资源分为类资源(比如用户信息类、商品类)和实例资源(具体的id为01的用户)

资源分为3个控制级别
1.匿名资源:不用登录就可以访问的资源,比如首页,登录页,注册页等
2.公共资源:登录(身份认证)后可以访问的资源,不用权限,比如用户个人中心
3.权限资源:身份认证后还需要有相应的权限,比如vip才可以访问的资源

权限:permission,对资源进行的操作,比如增删改查

权限模型
主体(账号、密码)
资源(资源名称、访问地址url)
权限(权限名称、针对的资源id)
角色(角色名称,比如管理员,普通用户,VIP用户)
角色和权限关系(角色id、权限id)
主体和角色关系(主体id、角色id)


上图常被称为权限管理的通用模型,不过企业在开发中根据系统自身的特点还会对上图进行修改。
因为权限模型与资源模型是一对一的关系,所以一般把它们合成一张表,即权限(权限名称、资源名称、资源访问地址)

权限控制两种方式
1.基于角色的访问控制(RBAC role  based  access  control)
系统代码中实现:
//如果该user是部门经理则可以访问if中的代码
if(user.hasRole('部门经理')){
//系统资源内容
//用户报表查看
}
问题:
角色针对人划分的,人作为用户在系统中属于活动内容,如果该 角色可以访问的资源出现变更,需要修改你的代码了,比如:需要变更为部门经理和总经理都可以进行用户报表查看,代码改为:

if(user.hasRole('部门经理') || user.hasRole('总经理')  ){
//系统资源内容
//用户报表查看
}
不易扩展维护,角色的权限一变动就得修改代码

2.基于资源的访问控制(RBAC resource  based  access  control)
对于资源增减和角色权限变更我们只需要通过后台管理平台增删对应的数据库表数据即可,不用修改代码
对资源的访问需要具有permission权限,代码可以写为:
if(user.hasPermission ('用户报表查看(权限标识符)')){
//系统资源内容
//用户报表查看
}
上边的方法就可以解决用户角色变更不用修改上边权限控制的代码。

粗粒度权限管理,对资源类型的权限管理。资源类型比如:菜单、url连接、用户添加页面、用户信息、类方法、页面中按钮,本质都是基于url
粗粒度权限管理比如:超级管理员可以访问户添加页面、用户信息等全部页面。
部门管理员可以访问用户信息页面包括 页面中所有按钮。

细粒度权限管理,对资源实例的权限管理。资源实例就资源类型的具体化,比如:用户id为001的修改连接,1110班的用户信息、行政部的员工。
细粒度权限管理就是数据级别的权限管理,基于数据行
细粒度权限管理比如:部门经理只可以访问本部门的员工信息,用户只可以看到自己的菜单,大区经理只能查看本辖区的销售订单。

打个断点,下篇文章写写shiro的入门使用...


原创粉丝点击