protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); User user = (User) principals.getPrimaryPrincipal(); Role role = roleService.findByRoleId(user.getId()); authorizationInfo.addRole(role.getRole()); List<Permission> permissions = permissionService.listPermissionsByRoleId(role.getId()); //把权限的URL全部放到authorizationInfo中去 Set<String> urls = permissions.stream().map(p -> p.getUrl()).collect(Collectors.toSet()); authorizationInfo.addStringPermissions(urls); return authorizationInfo; }解释这段代码
时间: 2024-02-09 12:07:27 浏览: 65
这段代码是一个 Java 项目中的 Shiro 框架的授权方法 `doGetAuthorizationInfo` 的实现。在 Shiro 中,授权是指确定当前用户是否有权执行某个操作或访问某个资源。这个方法的作用是获取当前登录用户的角色信息和权限信息,并将其封装为 `AuthorizationInfo` 对象返回。
具体来说,这个方法接收一个 `PrincipalCollection` 参数,其中包含了当前用户的身份信息,即 `User` 对象。首先,它通过调用 `roleService.findByRoleId(user.getId())` 方法获取当前用户所属的角色 `Role` 对象,并将其添加到 `authorizationInfo` 中。
接着,它通过调用 `permissionService.listPermissionsByRoleId(role.getId())` 方法获取当前角色所拥有的权限 `Permission` 对象列表,然后将这些权限的 URL 信息提取出来,用 `Collectors.toSet()` 方法转换为一个 `Set<String>` 集合,并将其添加到 `authorizationInfo` 中。
最后,该方法返回一个封装了当前用户角色和权限信息的 `authorizationInfo` 对象。这个对象会在 Shiro 进行授权时被用到,用于判断当前用户是否有权执行某个操作或访问某个资源。
相关问题
解释一下这段代码 use [GTA_SHFECOL2_TAQ_202001] GO IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'gtadar') DROP USER [gtadar] GO CREATE USER [gtadar] FOR LOGIN [gtadar] GO EXEC sp_addrolemember N'db_datareader', N'gtadar'
这段代码是用于管理数据库用户和权限的。具体释如下:
1.一行使用了 `use` 关键字,指定要操作的数据库为 `GTA_SHFECOL2_TA_202001`。这一个数据库名称,可能是一个交易数据的。
2. 第三行使用了 `IF EXISTS` 条件语句,用于检查是否存在名为 `gtadar` 的数据库用户。如果存在,则执行下一行的 `DROP USER` 语句,删除该用户。否则,跳过该步骤。
3. 第五行使用 `CREATE USER` 语句,创建一个名为 `gtadar` 的数据库用户。这个用户是基于一个名为 `gtadar` 的登录账户创建的。
4. 第七行使用 `EXEC sp_addrolemember` 语句,将 `gtadar` 用户添加到 `db_datareader` 角色中。这样,`gtadar` 用户就具有了读取数据库数据的权限。
总结来说,这段代码的作用是在 `GTA_SHFECOL2_TAQ_202001` 数据库中创建一个名为 `gtadar` 的用户,并给予其读取数据的权限。如果该用户已经存在,则先删除再重新创建。
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Current user : ys is not allowed to list roles. User has to belong to ADMIN role and have it as current role, for this action. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Current user : ys is not allowed get principals in a role. User has to belong to ADMIN role and have it as current role, for this action. Otherwise, grantor need to have ADMIN OPTION on role being granted and have it as a current role for this action.
这个问题看起来是由于缺乏足够的权限而导致的。根据错误信息,当前用户 "ys" 没有足够的权限来执行该操作。
要解决这个问题,您可以尝试以下方法:
1. 确认您是否具有足够的权限执行该操作。请确保您已经成为管理员角色,并且具有必要的权限来执行该操作。
2. 如果您已经是管理员角色并且仍然无法执行该操作,请检查您是否已经将管理员角色设置为当前角色。您可以尝试使用以下命令将管理员角色设置为当前角色:
```
SET ROLE admin;
```
3. 如果您不是管理员角色,请联系具有管理员权限的用户或管理员来授予您所需的权限。
希望这些方法可以帮助您解决问题。如果问题仍然存在,请提供更多信息,以便我可以提供更准确的解决方案。
阅读全文