C# ServiceStack授权-访问路由信息
在ServiceStack的文档中,它指出最佳实践是: 通常ServiceStack调用方法boolHasPermission(字符串 权限)在IAuthSession中。此方法检查列表 IAuthSession中的列表权限包含所需的 允许 IAuthSession存储在缓存客户端中,如上所述,您可以 将此列表填入已在中重写的经过身份验证的方法 本教程的第一部分 我正在与现有系统集成,并使自定义BasicAuthProvider正常工作(从基本BasicAuthProvider继承)。身份验证工作正常,现在我正在构建授权部分。我计划使用上面列出的权限列表,但我需要访问路由信息以确定用户是否有权访问特定资源。我看到在IAuthServiceBase中有一个IRequestContext,它具有绝对URL,但在进行分析之前,我认为必须有一种方法来访问ServiceStack路由结构,以便为我提供所请求服务的类名,或者与所请求服务相关的DTO 以下是我的BasicAuthProvider类中的OnAuthenticated方法:C# ServiceStack授权-访问路由信息,c#,asp.net,api,
servicestack,C#,Asp.net,Api,
servicestack,在ServiceStack的文档中,它指出最佳实践是: 通常ServiceStack调用方法boolHasPermission(字符串 权限)在IAuthSession中。此方法检查列表 IAuthSession中的列表权限包含所需的 允许 IAuthSession存储在缓存客户端中,如上所述,您可以 将此列表填入已在中重写的经过身份验证的方法 本教程的第一部分 我正在与现有系统集成,并使自定义BasicAuthProvider正常工作(从基本BasicAuthProvider继承)。身份验证工
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));
}
public override void OnAuthenticated(IServiceBase authService、IAAuthSession会话、IOAuthTokens令牌、字典authInfo)
{
UserSession sess=(UserSession)会话;
Model.User currentUser=UserRepository.GetUserByUsername(session.UserAuthName);
//使用要在应用程序中检索的数据填充IAuthSession,例如:
session.FirstName=currentUser.Person.FirstName;
session.LastName=currentUser.Person.LastName;
session.UserName=currentUser.User1;
sess.CurrentUser=CurrentUser;
//重要提示:您需要保存会话!
authService.SaveSession(session,TimeSpan.FromDays(1));
}
在MVC下,我以前使用过一些原始请求数据来获取控制器和操作名称,以确定资源授权,但这是我使用ServiceStack的第一个项目。您可以找到[RequiredPermission]属性,甚至它的,例如,在RequestFilter中传递的第三个参数是请求DTO 而且,由于请求数据与服务的比例为1:1,因此您可以确保请求的目的地是
iSeries设备
(或其子类,例如ServiceBase
,RestServiceBase
)。
您可以按以下步骤通过编程方式访问服务类型:
我不确定您试图支持的确切上下文/用例,但使用[RequiredPermission]或[RequiredRole]属性可能具有您所需的内容,默认情况下,这些内容会根据内置UserAuth表中可用的角色和权限列表进行验证
在外部,您可以使用/assignroles和/unassignroles web服务(作为AuthorizationFeature插件的一部分)将角色和权限分配给用户(默认情况下需要具有管理员角色的用户)
有关更多信息,请参阅上的文档页。注意,自年起,已将其替换为var serviceType=EndpointHost.Metadata.GetServiceTypeByRequest(requestDtoType);我是在这期间发现的。是的,thx更新了。另一种情况是陈旧的文档与impl不同步:)
var serviceType = EndpointHost.Metadata.GetServiceTypeByRequest(requestDtoType);