在本文中,我们将研究Spring安全角色和特权以及如何使用此功能来构建您的应用程序。
企业应用程序包含多个部分,它不允许所有用户访问整个应用程序。我们可能会提出一些要求,即我们希望根据用户角色和特权提供对应用程序的访问。让我们以管理电子商务商店的简单后端应用程序为例。
- 具有ADMIN角色的用户将具有执行任何操作的完全权限。
- 客户服务代理可以读取客户和订单信息,但看不到其他选项。
- 产品经理只能看到更新/创建产品的选项。
Spring安全性使使用角色和特权来构建这些类型的规则变得更加容易。我们可以在注册/创建过程中为用户分配角色和特权以及这些角色。在本文中,我们将了解如何使用Spring安全角色和特权功能来处理此类用例。为了确保我们有共同的理解,让我们看几个重要的术语。
- Role角色:角色代表了系统的高级别角色(例如ADMIN,MANAGER等),每个角色都可以具有低级别的权限。
- Privileges 权限:权限定义角色的低级权限(例如,ADMIN可以读取/写入/删除,但MANAGER只能读取/编辑)
可以从 GitHub Repository 下载完整的应用程序。
1.数据库设计
设计spring安全角色和权限的方法有多种,但是最常见和灵活的方法之一是围绕用户组构建角色和特权模块。作为任何应用程序的一部分,将用户分为几类,让我们以下面的示例为例,以便更好地理解:
- 前端用户应转到“CUSTOMER组”。
- 后端用户可以EMPLOYEE分组。
- 我们可以创建支持用户的另一个变体(例如ADMIN,MANAGER等等)
我们将使用相同的应用程序概念。应用程序的每个用户都将属于某个组,我们将使用这些组来驱动角色和权限。这是我们的应用程序的数据库设计。
- 每个用户都属于某个组。
- 组将在注册/创建时分配给用户。
- principle_group 定义系统中所有可用的组(例如客户,管理员等)
UserGoup实体:
@Entity
@Table(name = "principle_groups")
public class Group{
//removed getter and setter to save space
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true, nullable = false)
private String code;
private String name;