我正在将管理员区域作为我主项目的子项目。 在我的构建文件中,我有
val main = play.Project(appName, appVersion, appDependencies).dependsOn(admin)
在我的路线中我有
-> /admin admin.Routes
管理区域工作正常,但我希望能够限制对具有Admin角色的用户的访问权限。
我试过这个全球
@Override
public Handler onRouteRequest(Http.RequestHeader request) {
if(UserInfo.getCurrent().hasRole(SecurityRole.Type.ADMIN)){
if(request.path().startsWith("/admin")){
return admin.Routes.routes().apply(Http.Context.current()._requestHeader());
}
}
return super.onRouteRequest(request);
}
}
从当前上下文中抓取用户。但我收到了错误
RuntimeException: There is no HTTP Context available from here.
我想我可以使用Deadbolt在管理区域设置安全性,但我想,因为主文件路由到子项目,有一些简单的方法来限制从主项目的访问,但我还没有找到任何东西。
任何帮助都将不胜感激。
答案 0 :(得分:2)
在我的项目中,我使用deadbolt,一个游戏模块:https://github.com/schaloner/deadbolt-2-java
效果很好。
您可以使用
限制对控制器的访问@Restrict(@Group("admin"))
其中admin是您当前用户登录的角色。请查看文档!