首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Deadbolt - Play框架-如何在控制器中使用参数检查@RestrictedResource?

Deadbolt - Play框架-如何在控制器中使用参数检查@RestrictedResource?
EN

Stack Overflow用户
提问于 2012-07-24 18:22:15
回答 2查看 1.3K关注 0票数 3

使用Deadbolt的模块,我们可以在视图中使用资源名称和参数来检查restrictedResource。

例如,在我看来,我有它,并且它工作得很好:

代码语言:javascript
复制
#{deadbolt.restrictedResource resourceKeys:['Domain'] , resourceParameters:['domainid':domain.id]}
   <li><a href="@{Admin.showDomain(domain.id)}">${domain.title}</a></li>
#{/deadbolt.restrictedResource}

但是在我的控制器中,我只能检查资源名称,但是我找不到在我的RestrictedResourcesHandler中检查它的方法,通过传递域名it。

我正在寻找一个解决方案来做这样的事情:

代码语言:javascript
复制
@RestrictedResource(name = {"Domain"}, params = {domainid})
public static void showDomain(String domainid)
{
}

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-25 15:55:46

不可能在注释中包含动态信息,但是可以使用params来定义请求中传入的值的名称。但是,此信息目前不会传递给处理程序,因为它需要一个映射。虽然可以从restrictedResource标记传入参数映射,但不能通过注释完成此操作,因此会将一个空映射传递给处理程序。

这里最好的方法是从请求对象中提取一个众所周知的参数名。我需要重新思考如何在不破坏向后兼容性的前提下做到这一点。

Steve (Deadbolt的作者)

票数 4
EN

Stack Overflow用户

发布于 2012-08-17 20:38:49

我已经找到了一种解决问题的方法,虽然不是我认为最好的,但它是Steve Chaloner的解决方案(Deadbolt的创造者),而且它是有效的。

例如,如果你的控制器的方法参数被命名为" id ",而你想在你的checkAccess方法中检查这个id:

代码语言:javascript
复制
// Controller's method : 
@RestrictedResource(name = {"Domain"})
public static void showDomain(String id){} 

只需在checkAccess方法的开头检查映射"resourceParameters“为空,并使用请求对象获取参数:

代码语言:javascript
复制
public AccessResult checkAccess(List<String> resourceNames,
                                Map<String, String> resourceParameters)
{    
    Map<String, String> hashm = new HashMap<String,String>();

    if(resourceParameters != null && !resourceParameters.isEmpty()){
        hashm = resourceParameters;
    }else if(Http.Request.current().routeArgs!= null && !Http.Request.current().routeArgs.isEmpty()){
        hashm = Http.Request.current().routeArgs;
    }
}

然后,只需在checkAccess方法中访问您的hashmap,以获取控制器的方法参数,并按您的意愿检查访问。

代码语言:javascript
复制
for (Map.Entry<String,String> mp : hashm.entrySet())
{
    // Get the id argument
    if(mp.getKey().equals("id"))
    {
        // Do something with the value..
        mp.getValue()
    }        
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11628802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档