在ServiceStack的AuthUserSession中访问RouteData

时间:2015-09-11 13:02:44

标签: servicestack

我想对用户的权限进行二次检查。 我的控制器使用[RequiredPermission("ExamplePermission")]进行修饰,顺便说一下,它与控制器名称相对应。

我不想仅检查ExamplePermission列表中是否包含Session.Permissions字符串,而是想添加对RouteData参数的检查。

我可以在HasPermission方法中访问此类对象吗?

    public override bool HasPermission(string permission)
    {
        //checking routedata's parameters
        return base.HasPermission(permission);
    }

1 个答案:

答案 0 :(得分:2)

您无法从AuthUserSession内部访问当前路由,但您可以在全局请求过滤器中添加一个检查,以便您访问服务和请求类型,有关您的服务和用户会话的元数据,例如:

GlobalRequestFilters.Add((req, res, dto) =>
{
    var requestType = dto.GetType();
    var serviceType = HostContext.Metadata.GetServiceTypeByRequest(requestType);
    var operation = HostContext.Metadata.GetOperation(requestType);

    //operation.RequiredPermissions
    //operation.RequiresAnyPermission
    //...

    var userSession = req.GetSession();
    //userSession.HasPermission(...)
    //...
});