SaaS系统用户权限设计&RBAC&Shiro

用户、角色、资源、权限 

CREATE TABLE `co_department` (
 `id` varchar(40) NOT NULL,
`company_id` varchar(255) NOT NULL COMMENT '企业ID',
`parent_id` varchar(255) DEFAULT NULL COMMENT '父级部门ID',
`name` varchar(255) NOT NULL COMMENT '部门名称',
`code` varchar(255) NOT NULL COMMENT '部门编码',
`category` varchar(255) DEFAULT NULL COMMENT '部门类别',
`manager_id` varchar(255) DEFAULT NULL COMMENT '负责人ID',
`city` varchar(255) DEFAULT NULL COMMENT '城市',
`introduce` text COMMENT '介绍',
`create_time` datetime NOT NULL COMMENT '创建时间',
`manager` varchar(40) DEFAULT NULL COMMENT '部门负责人',
`update_time` datetime NOT NULL COMMENT '更新时间',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

1.公共控制层

import org.springframework.web.bind.annotation.ModelAttribute;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 公共controller
*     获取request,response
*     获取企业id,获取企业名称
*/
public class BaseController {
    protected HttpServletRequest request;
    protected HttpServletResponse response;
    @ModelAttribute
    public void setReqAndResp(HttpServletRequest request, HttpServletResponse response)
{
        this.request = request;
        this.response = response;
   }
    //企业id,(暂时使用1,以后会动态获取)
    public String parseCompanyId() {
        return "1";
   }
    public String parseCompanyName() {
        return "江苏播客教育股份有限公司";
   }
}

2 RBAC模型

2.1 什么是RBAC

        RBAC(全称:Role-Based Access Control)基于角色的权限访问控制,作为传统访问控制(自主访问,强制访 问)的有前景的代替受到广泛的关注。

        在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些 角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责 任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。角色可依新的需求和系统的合 并而赋予新的权限,而权限也可根据需要而从某角色中回收。角色与角色的关系可以建立起来以囊括更广泛的客观 情况。 访问控制是针对越权使用资源的防御措施,目的是为了限制访问主体(如用户等) 对访问客体(如数据库资源等) 的访问权限。企业环境中的访问控制策略大部分都采用基于角色的访问控制(RBAC)模型,是目前公认的解决大 型企业的统一资源访问控制的有效方法。

2.2 基于RBAC的设计思路

基于角色的访问控制基本原理是在用户和访问权限之间加入角色这一层,实现用户和权限的分离,用户只有通过激 活角色才能获得访问权限。通过角色对权限分组,大大简化了用户权限分配表,间接地实现了对用户的分组,提高 了权限的分配效率。且加入角色层后,访问控制机制更接近真实世界中的职业分配,便于权限管理。

用户:角色:权限 多对多的关系。

即:一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的映射关系。在这种模型 中,用户与角色之间,角色与权限之间,一般者是多对多的关系。

3 SAAS-HRM中的权限设计

3.1 需求分析

 3.2 权限设计

 针对此种权限模型,其中权限究竟是属于菜单,按钮,还是API的权限呢?那就需要在设计数据库权限表的时候添 加类型加以区分(如权限类型 1为菜单 2为功能 3为API)。

3.3 表结构分析

 

1. 不需要区分哪些是操作,哪些是资源

2. 方便扩展,当系统要对新的东西进行权限控制时,我只需要建立一个新的资源表,并确定这类权限的权限类 型标识即可。

若想整明白权限,请先了解拦截器、过滤器!!!

Shiro

1、介绍


Apache Shiro是Java的一个安全框架。Shiro可以帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存等。其不仅可以用在 JavaSE环境,也可以用在 JavaEE 环境。

2、优点

  • 易于理解的 Java Security API
  • 简单的身份认证,支持多种数据源
  • 对角色的简单的授权,支持细粒度的授权
  • 不跟任何的框架或者容器捆绑,可以独立运行

3、特性


Authentication身份认证/登录,验证用户是不是拥有相应的身份
Authorization授权,即验证权限,验证某个已认证的用户是否拥有某个权限,即判断用户是否能做事情 SessionManagement会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中
Cryptography加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储
Caching缓存,比如用户登录后,其用户信息,拥有的角色/权限不必每次去查,提高效率
ConcurrencyShiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去
Testing提供测试支持
RunAs允许一个用户假装为另一个用户(如果他们允许)的身份进行访问
RememberMe记住我,这是非常常见的功能,即一次登录后,下次再来的话不用登录了

4、架构


Subject主体,代表了当前的“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫, 机器人等;即一个抽象概念;所有Subject都绑定到SercurityManager,与Subject的所有交互都会委托给SecurityManager;可以把Subject认为是一个门面;SecurityManager才是实际的执行者
SecurityManage安全管理器;即所有与安全有关的操作都会与SecurityManager交互;且它管理着所有Subject; 可以看出它是Shiro的核心,它负责与后边介绍的其他组件进行交互
Realm域,Shiro从Realm获取安全数据(如用户,角色,权限),就是说SecurityManager要验证用户身份, 那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以有1个或多个Realm,我们一般在应用中都需要实现自己的Realm
SessionManager如果写过Servlet就应该知道Session的概念,Session需要有人去管理它的生命周期,这个组件就是SessionManager
SessionDAODAO大家都用过,数据库访问对象,用于会话的CRUD,比如我们想把Session保存到数据库,那么可以实现自己的SessionDAO,也可以写入缓存,以提高性能
CacheManager缓存控制器,来管理如用户,角色,权限等的缓存的;因为这些数据基本上很少去改变,放到缓存中后可以提高访问的性能

应用代码通过Subject来进行认证和授权,而Subject又委托给SecurityManager; 我们需要给Shrio的SecurityManager注入Realm,从而让SecurityManager能得到合法的用户及其权限进行判断,Shiro不提供维护用户/权限,而是通过Realm让开发人员自己注入。

Shiro不会去维护用户,维护权限;这些需要自己去设计/提供;然后通过响应的接口注入给Shiro即可

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于SAAS模式的多用户数据体系结构。 信任,或是缺乏充分信任,都是妨碍“软件即服务”(SaaS) 推广的首要问题。我们可以说,关于产 品、客户、雇员、供应商等的数据是商业运营中最重要的资产。当然,SaaS 的核心也是数据SaaS 应用使客户能通过网络集中存取数据,成本低于使用本地安装的应用。不过,为了充分发挥 SaaS 的 优势,企业必须在一定程度上放弃对自身数据的控制,要在确保数据安全并避免泄密方面充分信赖 SaaS 服务商。 为了赢得客户的信任,希望开展 SaaS 业务的架构师首先应创建成熟稳定、安全可靠的 SaaS 数据体 系结构,使用户和客户都能够放心地将重要的商业数据交给第三方合伙伙伴进行管理和控制,而且该架 构还应该能够以极低成本实现高效管理和维护。 本文是我们介绍多用户应用设计系列文章中的第二篇。第一篇文章《抓住长尾市场的架构战略》从较高 层面介绍了 SaaS 模式及其挑战和优势。该文的网络版刊登在 MSDN 上,网址为: msdn.microsoft.com/library/en-us/dnbda/html/ArchStratCtchLngTail.asp。本系列的其他文 章将侧要于讨论工作流程、用户界面设计以及整体安全性等问题。 在本文中,我们将讨论如何处理从完全隔离的数据直到完全共享的数据,并根据不同地点的数据隔离和 共享情况指出创建数据体系结构的三种方法。随后,我们将探讨决定采用何种方法时应考虑的技术和商 业因素。最后,针对确保安全性、创建可扩展数据模型以及数据基础结构的可扩展性等方面,我们将提 出一些设计模式。
### 回答1: SaaS系统权限表的设计可以考虑以下几点: 1. 定义用户类型,如管理员、普通用户等。 2. 建立用户权限关系表,记录用户与其对应的权限。 3. 建立资源权限关系表,记录各类资源与其对应的权限。 4. 设计权限继承机制,使得用户可以继承角色的权限。 5. 提供权限分配界面,方便管理员对用户权限进行分配。 6. 实现权限控制机制,根据用户和资源的权限关系,对用户的访问进行控制。 ### 回答2: 设计Saas系统的权限表需要考虑以下几个方面: 首先,需要确定系统的用户角色以及每个角色的权限范围。通常来说,Saas系统中常见的用户角色包括超级管理员、管理员、普通用户等。超级管理员拥有最高权限,可以对整个系统进行管理和配置;管理员可以对用户和数据进行管理;普通用户具有基本的系统功能权限。 其次,需要考虑每个角色可以访问的功能模块和操作。根据系统的具体功能和需求,将功能模块进行划分,确定每个角色可以访问的功能。例如,超级管理员可以对用户管理、权限配置、数据备份等进行操作,管理员可以对数据增删改查,而普通用户只能进行数据查询。 另外,对于每个功能模块,还需要细分每个操作的权限级别。例如,在数据管理模块中,可以将增加、删除、修改和查询等操作作为不同的权限级别进行划分,不同角色可以拥有不同级别的权限。 此外,还需要考虑数据权限的设计。对于一些敏感数据或者需要保密的数据,需要限定只有特定角色或者特定用户可以访问。可以通过在权限表中设置数据权限字段,来控制数据的访问范围。 最后,需要注意权限的继承与覆盖。例如,管理员拥有某些操作的权限,那么普通用户也应该继承这些权限;而如果超级管理员对某个功能进行了设置,那么管理员和普通用户的设置应该以超级管理员的为准。 综上所述,设计Saas系统的权限表需要考虑用户角色、功能模块划分、操作权限级别以及数据权限等方面,以满足系统的功能需求并确保安全性和灵活性。 ### 回答3: 设计SaaS系统的权限表是一个关键的工作,它需要考虑到系统的功能需求和安全性。以下是一些设计权限表的思路: 首先,需要确定系统中的角色类型。根据系统的功能和用户需求,可以定义一些常见的角色,比如超级管理员、管理员、普通用户等。每个角色的权限应该是不同的,超级管理员拥有最高权限,可以对系统的所有功能进行完全控制,而普通用户的权限则应该是有限的。 接下来,需要明确每个角色具体的权限。可以根据系统的功能模块将权限进行划分,比如用户管理、数据管理、统计分析等。在每个模块中,需要确定每个角色能够执行的具体操作,比如查看、新增、修改、删除等。 此外,还需要考虑权限的细粒度。有些操作可能涉及到具体数据或资源的访问控制,比如只能访问自己的数据或只能访问特定的文件夹。在权限表中可以针对这些情况进行定义,确保系统的安全性。 最后,需要对权限表进行测试和优化。在设计完成后,可以进行一些测试来验证权限表的正确性和可用性。如果发现问题或需要进行调整,可以及时对权限表进行优化,以确保系统的正常运行和安全性。 总之,设计SaaS系统的权限表需要考虑到角色类型、具体权限、权限的细粒度以及测试和优化等方面,以满足系统的功能需求和安全性要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值