Restlet:根据用户正在访问的“项目”(组)添加角色

时间:2011-08-14 11:40:45

标签: restlet restlet-2.0

假设黑板类型的应用程序。有2个项目 - ProjectA和ProjectB。用户'nupul'(我)是这两个项目的一部分。对于A我是管理员而对于B我只是一个'成员'(没有管理员权限)

/MySite/ProjectA/Items访问资源时,我想检查用户是否是管理员。

我知道可以通过从请求中选择{projectName}参数并使用标识符(发出请求的用户)并将其转发以检查数据库来完成等,

我的问题是'如何'在身份验证过程中使用Enroler'添加角色。由于我在该阶段无法访问{projectName}参数。我不知道你是否必须使用群组/领域等来完成这项工作,但老实说,这只是让我太过于了解如何有效地使用它? (即,在请求被转发到资源之前)

我的意思是我知道我可以创建这些组/领域,但如何从资源中访问正确的'角色'? Restlet真的需要有更实际的例子和更好的文档来展示它的类的使用!这让我疯了!身份验证不应该太困难! :)

1 个答案:

答案 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变量的值,并能够在身份验证处理中使用它。

希望它可以帮到你, 亨利