gpt4 book ai didi

c# - ServiceStack授权-访问路由信息

转载 作者:行者123 更新时间:2023-11-30 17:13:23 25 4
gpt4 key购买 nike

在 ServiceStack 的文档中,它说最佳实践是:

Normally ServiceStack calls the method bool HasPermission(string permission) in IAuthSession. This method checks if the list List Permissions in IAuthSession contains the required permission.

IAuthSession is stored in a cache client as explained above You can fill this list in the method OnAuthenticated you've overriden in the first part of this tutorial.

我正在与现有系统集成,并让我的自定义 BasicAuthProvider 正常工作(继承自基础 BasicAuthProvider)。身份验证工作正常,现在我正在构建授权部分。我计划使用上面列出的权限列表,但我需要访问路由信息以确定用户是否有权访问特定资源。我在 IAuthServiceBase 中看到有一个具有绝对 URL 的 IRequestContext,但在通过并解析它之前,我认为必须有一种方法可以访问 ServiceStack Route 结构,以便为我提供服务的类名被请求,或与请求的服务相关的 DTO。

这是我的 BasicAuthProvider 类中的 OnAuthenticated 方法:

public override void OnAuthenticated(IServiceBase authService, IAuthSession session, IOAuthTokens tokens, Dictionary<string, string> authInfo)
{


UserSession sess = (UserSession)session;

Model.User currentUser = UserRepository.GetUserByUsername(session.UserAuthName);

//Fill the IAuthSession with data which you want to retrieve in the app eg:
session.FirstName = currentUser.Person.FirstName;
session.LastName = currentUser.Person.LastName;
session.UserName = currentUser.User1;
sess.CurrentUser = currentUser;
//Important: You need to save the session!
authService.SaveSession(session, TimeSpan.FromDays(1));
}

在 MVC 下,我之前使用了一些原始请求数据来获取 Controller 和操作名称,以确定资源授权,但这是我使用 ServiceStack 的第一个项目。

最佳答案

您可能会发现 [RequiredPermission] 属性甚至是 implementation它会帮助你,例如RequestFilter 中传递的第三个参数是 Request DTO。

并且由于请求 DTO 与服务 1:1 映射,您可以确定该请求的目标是 IService<TRequest>。 (或其子类,例如 ServiceBase<T>RestServiceBase<T> )。您可以像在 FilterAttributeCache 中那样以编程方式访问服务类型。 :

var serviceType = EndpointHost.Metadata.GetServiceTypeByRequest(requestDtoType);

我不确定您要支持的确切上下文/用例,但使用 [RequiredPermission][RequiredRole] 属性可能有什么您需要默认情况下根据内置 UserAuth 表中可用的角色和权限列表进行验证。

在外部,您可以使用/assignroles 和/unassignroles 网络服务(作为 AuthorizationFeature 插件的一部分)为用户分配角色和权限(默认情况下需要具有管理员角色的用户)。

有关更多信息,请参阅 Authentication/Authorization 上的文档页面和 ValidationServiceStack GitHub project wiki 上.

关于c# - ServiceStack授权-访问路由信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9806267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com