假设黑板类型的应用程序。有2个项目 - ProjectA和ProjectB。用户'nupul'(我)是这两个项目的一部分。对于A我是管理员而对于B我只是一个'成员'(没有管理员权限)
在/MySite/ProjectA/Items
访问资源时,我想检查用户是否是管理员。
我知道可以通过从请求中选择{projectName}
参数并使用标识符(发出请求的用户)并将其转发以检查数据库来完成等,
我的问题是'如何'在身份验证过程中使用Enroler'添加角色。由于我在该阶段无法访问{projectName}
参数。我不知道你是否必须使用群组/领域等来完成这项工作,但老实说,这只是让我太过于了解如何有效地使用它? (即,在请求被转发到资源之前)
我的意思是我知道我可以创建这些组/领域,但如何从资源中访问正确的'角色'? Restlet真的需要有更实际的例子和更好的文档来展示它的类的使用!这让我疯了!身份验证不应该太困难! :)
答案 0 :(得分:0)
执行所需操作的方法是根据应用程序中的项目名称拆分路由器(方法createInboundRoot)。在这种情况下,将在调用验证器之前评估projectname。请参阅下面的一些实施此类方法的示例:
public Restlet createInboundRoot() {
Router rootRouter = new Router(getContext());
rootRouter.setDefaultMatchingMode(Template.MODE_STARTS_WITH);
rootRouter.attach("/{projectname}/", createApplicationForProject());
return rootRouter;
}
private Restlet createApplicationForProject() {
Router router = new Router(getContext());
ChallengeAuthenticator guard
= new ChallengeAuthenticator(getContext(),
ChallengeScheme.HTTP_BASIC, "realm");
guard.setVerifier(verifier);
guard.setEnroler(enroler);
guard.setNext(router);
router.attach("items", ItemsServerResource.class);
return guard;
}
使用这种方法,您可以在验证程序中访问projectname变量的值,并能够在身份验证处理中使用它。
希望它可以帮到你, 亨利