当前位置: 首页 > 知识库问答 >
问题:

java spring:如何分离用户角色和权限?

陶博涉
2023-03-14

我目前的理解是Spring没有区分角色和权威,唯一的区别是角色名称的缩写role_

我希望实现的是具有权威的角色。另外,如果我给一个用户ADMIN这个角色,他就会获得所有相关的特权(举个例子,我们可以访问网站上的路由以更新页面)

我当前的实现如下:我有一个自定义特权类,它与Roles类有多对多的关系,而Roles类与用户的类有多对多的关系。当公共集合<?调用UserDetails的extends grantedAuthority>getAuthority(),它迭代所有权限并获取。

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
    List<SimpleGrantedAuthority> authorities = new ArrayList<>();
    for (Role role : this.roles) {
        for (Privilege pri : role.getPrivileges()) {
            SimpleGrantedAuthority auth = new SimpleGrantedAuthority(pri.getName());
            if (!authorities.contains(auth)) {
                authorities.add(auth);
            }
        }
    }
    return authorities;
}

我的问题是:有没有更好的方法(最好是spring security本机)?

编辑:角色位于数据库中,以便允许动态插入新角色。当前权限也是如此,但可能会被删除以进行硬编码(动态权限在此特定实现中没有多大意义)

共有1个答案

袁河
2023-03-14

您需要扩展WebSecurityConfigurerAdapter以实现如下所示:

@Configuration
@EnableWebSecurity
@ComponentScan(basePackages = "com.spring.boot.rocks")
public class ConfigWebSecurity extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
    httpSecurity.authorizeRequests().antMatchers("/css/**")
            .permitAll();
httpSecurity.authorizeRequests().antMatchers("/only/for/admin/**").access("hasAuthority('ADMIN')")
....
....
}

这就是如何使用spring Security限制/允许对不同endpoint/URI的访问。注意最后一行,它限制以/only/for/admin开头的所有URL对除admin以外的所有角色/权限的访问。希望你想到了。一个完整的例子,看看这里和这里。

 类似资料:
  • 有些企业会对向用户发送的营销内容进行严格的管理——基层的运营或营销经理拟定的活动必须经过上级管理者的审批,方可生效执行。为此,诸葛的智能触达中提供了基于用户角色的触达活动权限管理,以支撑上述的企业需求。 如果您的团队需要使用权限控制,可通过以下步骤开启使用: 开启权限控制:智能触达的权限控制默认是关闭的,需要开启后方能使用; 分配用户角色:为团队成员分别分配设定「管理员」和「运营人员」角色; 开始

  • 我不是Spring4的新手,但我是SpringSecurity4ACL的新手。我刚刚在我的MVC Web应用程序上实现了Spring Security4,这些应用程序都是后端Web服务。这里贴出了我所做的事情的链接: 这为我的URL增加了安全性,只有具有特定角色的用户才能请求URL。这太棒了!我们以SiteMinder为例,不是传回一个用户名,而是在请求头中传回一个令牌。我们调用OpenAM,传入

  • 假设一个web安全系统由5个表组成,这些表处理web应用程序的授权部分: 用户 角色 权限 角色权限(角色和权限之间的多对多) 用户角色(用户和角色之间的多对多) 有时,用户需要被授予对权限规则的短时间访问权限,然后再次删除,例如当某人外出度假,而其他人需要接管他的任务时。简单的回答是创建一个新角色,将该角色分配给用户,当不再需要该角色时,从用户中删除该角色或完全删除该角色。 我不想一直为这样的事

  • 6.0 版本开始,管理员可以在用户管理界面为一个用户赋予一个角色,不同角色可以配置不同权限,目前支持 10 种权限。 6.1 版本开始,我们添加了一个新的权限 relo_quota(角色配额),该权限用来给某个用户的角色设置空间配额。例如,我们可以通过添加 'role_quota': '100g' 为 employee 角色设置100GB的空间配额,同时其他用户还是使用默认的空间配额。 Seafi

  • 我有表: 用户、角色 数据透视表: 角色\u用户 模型: 用户、角色和权限。 现在我想实现的是,假设admin在控制面板中添加了新权限。那么,糟糕的是,作为一名开发人员,我必须站起来,打开代码,手动将这个新添加的权限放在一些路由的中间软件中。每次管理员授予新权限时,我都必须手动添加代码。 是否有任何方法可以动态执行所有这些操作,以便在管理员添加新权限后,我不会更改任何内容,也不会添加代码,并且新权