java - 在死锁中使用动态权限时如何获取控制器参数的值
问题描述
我在控制器上的 Deadbolt 2 中使用动态权限来检查用户是否有权访问资源。这个资源有一个 ID,在我的控制器中,我有一个方法getById(String id)
。看起来像这样:
@Dynamic("checkAccess")
public CompletionStage<Result> getById(String id) {
//Go get my item from DB
}
在我在 Deadbolt 中的自定义资源处理程序中,我想使用在调用时传递给方法的 id 字符串(例如,检查当前用户是否拥有由 ID 指定的这个特定项目的所有权)。
ID 至少出现在两个地方:我的 URL,作为路由参数,以及在调用方法时作为参数。如何在我的动态权限控制器中访问此 ID:
HANDLERS.put("checkAccess", Optional.of(new AbstractDynamicResourceHandler() {
public CompletionStage<Boolean> isAllowed(final String name, final Optional<String> meta,
final DeadboltHandler deadboltHandler, final Http.Context context) {
Logger.debug("*** Custom permission test");
//HERE - Do something with the ID
return CompletableFuture.completedFuture(Boolean.FALSE);
}
}));
我在这里发现了一些关于这个问题的东西,但它很老套,而且是 6 年前的事了,我有点希望有一种更清洁的方法来做到这一点。
解决方案
如果您使用自己的 DynamicResourceHandler,则应该在DynamicResourceHandler
某处实现接口。在那里您将需要实现该isAllowed()
功能(用于@Dynamic
注释)。它的参数之一是Http.context ctx
您可以从中获取ctx.request()
用于权限检查的路由参数。
import be.objectify.deadbolt.java.*;
import play.mvc.Http;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
public class YourOwnDynamicResourceHandler implements DynamicResourceHandler {
@Override
public CompletionStage<Boolean> isAllowed(String name, Optional<String> meta, DeadboltHandler deadboltHandler, Http.Context ctx) {
System.out.println(ctx.request().toString()); // <- route parameters
// Your check goes here
return CompletableFuture.completedFuture(false);
}
@Override
public CompletionStage<Boolean> checkPermission(String permissionValue, Optional<String> meta, DeadboltHandler deadboltHandler, Http.Context ctx) {
// Your check goes here
return CompletableFuture.completedFuture(false);
}
}
注意:答案基于 Deadbolt 2.6.4。
推荐阅读
- ado.net - SAP HanaDB SQL 中声明的数组/表变量值错误
- c++ - 无法理解如何摆脱 goto
- c# - 如何除整数而不是 1
- spring - javax验证api不适用于pojo验证
- c# - 从控制台 C# 读取数据时无法解码 base64
- javascript - 如何让 Highcharts XAxis 以 2 分钟的间隔显示
- node.js - 为什么我的 Node.js 包在全局安装时缺少主文件?
- spring-boot - 如何将用户从用户服务数据库迁移到spring boot auth server数据库?
- powerbi - 段的百分比值相对于段总 Power BI(DAX)
- powershell - 如何使用 PowerShell 进行远程访问?