问题标签 [deadbolt-2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 在死锁中使用动态权限时如何获取控制器参数的值
我在控制器上的 Deadbolt 2 中使用动态权限来检查用户是否有权访问资源。这个资源有一个 ID,在我的控制器中,我有一个方法getById(String id)
。看起来像这样:
在我在 Deadbolt 中的自定义资源处理程序中,我想使用在调用时传递给方法的 id 字符串(例如,检查当前用户是否拥有由 ID 指定的这个特定项目的所有权)。
ID 至少出现在两个地方:我的 URL,作为路由参数,以及在调用方法时作为参数。如何在我的动态权限控制器中访问此 ID:
我在这里发现了一些关于这个问题的东西,但它很老套,而且是 6 年前的事了,我有点希望有一种更清洁的方法来做到这一点。
scala - Scala DeadboltAction 然后自定义播放 ActionBuilder
这是我的问题:我需要使用死锁检查控制器的用户权限,然后向请求中添加一些内容(使用 ActionBuilder)。通常使用 Play Action Builders,(action1 andThen action2)
但这不适用于 DeadboltActions。
这里有一些代码:
动作生成器
控制器:
[错误] 未应用的方法仅在需要函数类型时才转换为函数。您可以通过编写
Pattern _
或Pattern(_,_,_,_,_)(_)(_)
代替Pattern
.[错误] def createSomething: Action[AnyContent] = (deadbolt.Pattern("Create_Deck", PatternType.EQUALITY)() andThen itemAction).synchronized() { 隐式请求:ItemRequest[AnyContent] =>
有谁已经处理过这个问题?
jackson - 受 Deadbolt“限制”注释影响的 Jackson 解串器
Could not resolve type id 'path.to.MyClass' as a subtype of [simple type, class java.lang.Object]: no such class found
当我尝试Map<String, MyClass>
使用 @Restrict 注释将 JSON 反序列化到路由操作内部时,我在使用 DeadBolt(2.6.3 和 2.7.0)的 play 2.7 服务器上收到异常。如果删除此注释,一切正常。
MyClass.java
连载Map<String, MyClass>
输出
JSON 格式看起来如此,因为它向后兼容使用旧 FlexJson 的旧服务器。
反序列化
playframework - 如何将信息从 DeadboltHanlder 传递到 Controller-Method (Play Framework 2.8)
在我们的 Play Framework 应用程序中,我们使用Deadbolt模块进行用户身份验证。这意味着getSubject()
我们的 DeadboltHandler 实现的方法将在实际的 Controller 方法之前被调用。但是,我们需要将确定的 User-ID 从 DeadboltHandler 的getSubject()
方法传输到 Controller 方法。
直到并包括 Play Framework 2.6,这可以通过将 User-ID 添加到 来轻松完成HttpContext.args
,因为HttpContext
在getSubject()
Controller-Method 和 Controller-Method 中都可以使用。不幸的是,在 Play Framework 2.7 及更高版本中,不再有HttpContext
- 我们必须HttpRequest
直接使用。但这似乎HttpRequest
是一成不变的;我们无法HttpRequest
轻松添加确定的用户 ID。
是的,有Http.Request.withAttrs()
,但这不会修改HttpRequest
对象,而是返回一个新HttpRequest
对象。因此,据我所知,这对于将任何信息从方法传递到 Controller 方法没有帮助。getSubject()
那么,在 Play Framework 2.7+ 中将特定于请求的信息从 DeadboltHandler 传递到 Controller-Method 的推荐方法是什么???
控制器类:
DeadboltHandler 实现:
注意:MyDeadboltHandler.subject()
确定 的方法由框架隐式Subject
调用,然后调用实际的控制器方法。
谢谢你和最好的问候。