4.Shiro基本表设计

目录


Shiro专栏目录(点击进入…)



Shiro五张表

在Web应用中,对安全的控制主要有角色资源权限(什么角色能访问什么资源)几个概念,一个用户可以有多个角色,一个角色也可以访问多个资源,也就是角色可以对应多个权限
数据库设计,至少需要建5张表:用户表用户-角色表角色表角色-资源表资源表
在这里插入图片描述


①一个用户对应一个或者多个角色。
②一个角色对应一个或者多个权限。
③一个权限对应能够访问对应的API或URL资源。
在这里插入图片描述


(1)用户表

用户表中至少包含以上的字段,主键id、用户名username、密码password、盐值salt(因为密码是经过Shiro加密的,需要通过盐值校验,由Shiro生成,不需要用户手动填写)、角色列表roleId(这个字段不是必须的,仅实现在展示用户信息的时候能同时展示用户当前角色)、是否锁定locked(决定当前账户是否是锁定的)。

创建新的用户,仅需要输入用户名和密码即可,盐值由Shiro生成,角色列表和是否锁定都可以在后期管理。

其中locked是否锁定字段类型为tinyint(1),设置这种类型,数据库中实际存储的是int类型数据,一般是0和1,在使用Mybatis取这个字段的数据时,Mybatis会自动将tinyint(1)字段值为0的转换成false,将字段值为1以上的转换为true


(2)用户-角色表

用户-角色表比较简单,仅仅包含了用户ID:user_id、角色ID:role_id,使用了联合主键
这张表主要描述指定用户与角色间的依赖关系。其中用户表与角色表是一对多的关系,一个用户可以拥有多个角色


(3)角色表

角色表中role角色名称一般为存储着类似user:create这种格式,Shiro在Realm中校验用户身份的时候会通过role这个字段值进行校验;remark是此角色的描述信息,比如:用户创建

其中parentId表示父节点,就是说,当前的角色可能有上级节点,如果存在父节点,这个字段值就是父级节点的ID,根据这个ID,在展示数据的时候就很方便的展示出其在哪个父节点下

parentId:用于超级管理员,对角色及其权限的控制。
如果存在子节点,则显示为目录。不存在子节点,则显示问文件图标。形成树状结构。

locked表示当前节点是否锁定,同样是tinyint(1)类型,如果为false就说明没有锁定


(4)角色-权限(菜单)表

角色-资源(权限)表和用户-角色表类似。包含了角色ID:role_id、权限ID(菜单):menu_id(permission_id)

主要描述角色和权限间的依赖关系,同样,角色和权限间也是一对多的关系,一个角色会关联多个权限


(5)权限(菜单)表

权限(资源)表中menu权限名称一般为存储着类似admin/**(URL)格式,Shiro在Realm中授权的时候会通过path这个字段值进行授权

locked表示当前节点是否锁定,同样是tinyint(1)类型,如果为false就说明没有锁定


为什么不设计外键?

比如:用户表和角色表间,这里创建了用户-角色表来实现两者的关联;并没有通过给两张表建立外键来实现一对多、多对多的关联关系

如果要建立外键来关联两张表,会遇到如下问题:
(1)如果两张表之间存在一对多的关系,在给一的一方新增数据的时候,要考虑多的一方是否存在指定的id
(2)如果两张表之间存在一对多的关系,在删除多的一方时你要先删除其关联的一的一方,再删除多的一方

也就是说如果使用了外键关联,那么在对表进行数据操作时就必须考虑另一张关联的表,相当于两张表就绑在一起了,操作这张表就必须考虑另一张关联表

但是实际开发中,不想立即就修改或更新关联表的数据,可能一会再去更新另一张关联表的数据,那么就产生了这种方式:通过单独建立一张关联来实现两张表的数据关联
所以,建议在设计表时尽量减少表与表直接的外键约束,这样能避免很多麻烦,并且两张表之间的关联关系也会格外清晰

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: shiro是一个Java开发的开源安全框架,用于进行身份认证、授权和会话管理等安全相关的操作。shiro的官方文档是一份详细的介绍和使用指南,有助于开发人员快速了解和掌握shiro的使用。 shiro中文官方文档是针对中国开发者而编写的,文档内容由shiro的官方团队进行翻译和整理,确保准确传达原始文档的含义。这份文档包含了shiro基本概念、核心组件、配置方法以及常见的使用场景等内容。 在官方文档中,首先会介绍shiro基本概念,如Subject、Realm、Permission等。然后,会阐述如何配置shiro的环境和依赖,在应用程序中引入shiro的相关依赖并进行配置,以实现身份认证和授权的功能。 官方文档还会详细说明如何使用shiro进行身份认证,包括使用自定义的Realm实现用户认证和授权等功能。同时,文档也会指导开发者如何管理用户的会话信息和进行权限控制,以保护应用程序的安全。 此外,官方文档还会提供一些常见的使用场景和示例代码,帮助开发者更好地理解和掌握shiro的实际应用。通过官方文档的阅读和实践,开发者可以加深对shiro的理解,并能够灵活地应用在实际的项目开发中。 总而言之,shiro中文官方文档是一份对于开发者非常有价值的参考材料,可以帮助开发者快速入门和掌握shiro的使用方法,提升应用程序的安全性。 ### 回答2: Shiro中文官方文档是一个详细的文档资源,用于帮助理解和使用Shiro安全框架。该文档提供了全面的内容,包括Shiro基本概念、架构和核心组件,以及如何在实际项目中集成和使用Shiro进行身份验证和授权等功能。 文档的结构清晰,内容组织合理,易于阅读和理解。通过官方文档,我们可以了解到Shiro的整体工作原理和使用方法,它通过模块化的设计可以灵活地满足各种安全需求。 在文档中,我们可以学习如何配置Shiro,包括如何定义用户、角色和权限等信息,并且了解如何使用Shiro提供的各种身份验证和授权机制来保护应用程序的安全性。 此外,文档还提供了丰富的示例代码和解释,帮助我们更好地理解每个功能的实现方式。通过这些示例,我们可以学习到如何使用Shiro来进行常见的安全操作,如用户登录、权限检查和会话管理等。 总的来说,Shiro中文官方文档是一个价值非常高的资源,它为学习和使用Shiro提供了全面的指导。无论是初学者还是有一定经验的开发者,都能从中受益并快速上手使用Shiro框架。 ### 回答3: shiro是一个流行的Java安全框架,用于身份验证、授权和会话管理等安全功能。它提供了一套易于使用和灵活的API,可以帮助开发者快速实现应用程序的安全性。 shiro中文官方文档是官方团队为了方便中国开发者使用shiro而提供的中文文档。这个文档详细介绍了shiro的各个功能和特性,以及如何在实际项目中使用shiro来保护应用程序的安全性。 文档内容主要包括以下几个方面: 1. 身份验证:介绍了shiro如何进行用户名密码的验证以及其他的身份认证方式,包括基于数据库、LDAP等的认证方式。 2. 授权管理:讲解了如何使用shiro进行细粒度的访问控制,包括角色、权限的管理和配置等。 3. 会话管理:给出了一些关于会话管理的方案,包括基于Cookie、URL重写等的会话跟踪和管理方法。 4. 加密和哈希:详细介绍了如何使用shiro提供的加密和哈希算法来确保用户密码和敏感信息的安全性。 5. 缓存管理:介绍了如何使用shiro提供的缓存功能来提高系统性能和用户体验。 6. 整合和扩展:介绍了如何将shiro与其他框架或技术进行整合,并提供了一些扩展shiro功能的方法。 通过阅读shiro中文官方文档,开发者可以了解shiro基本概念和功能,并且能够清晰地了解如何在自己的项目中使用shiro来提供安全保障。文档中提供了丰富的示例代码和实际应用场景,对初学者来说非常友好。总体来说,shiro中文官方文档是学习和使用shiro的重要指南,对于帮助开发者理解和掌握shiro非常有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未禾

您的支持是我最宝贵的财富!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值