Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ServiceStack授权-访问路由信息_C#_Asp.net_Api_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack - Fatal编程技术网 servicestack,C#,Asp.net,Api,servicestack" /> servicestack,C#,Asp.net,Api,servicestack" />

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

C# ServiceStack授权-访问路由信息,c#,asp.net,api,servicestack,C#,Asp.net,Api,servicestack,在ServiceStack的文档中,它指出最佳实践是: 通常ServiceStack调用方法boolHasPermission(字符串 权限)在IAuthSession中。此方法检查列表 IAuthSession中的列表权限包含所需的 允许 IAuthSession存储在缓存客户端中,如上所述,您可以 将此列表填入已在中重写的经过身份验证的方法 本教程的第一部分 我正在与现有系统集成,并使自定义BasicAuthProvider正常工作(从基本BasicAuthProvider继承)。身份验证工

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

通常ServiceStack调用方法boolHasPermission(字符串 权限)在IAuthSession中。此方法检查列表 IAuthSession中的列表权限包含所需的 允许

IAuthSession存储在缓存客户端中,如上所述,您可以 将此列表填入已在中重写的经过身份验证的方法 本教程的第一部分

我正在与现有系统集成,并使自定义BasicAuthProvider正常工作(从基本BasicAuthProvider继承)。身份验证工作正常,现在我正在构建授权部分。我计划使用上面列出的权限列表,但我需要访问路由信息以确定用户是否有权访问特定资源。我看到在IAuthServiceBase中有一个IRequestContext,它具有绝对URL,但在进行分析之前,我认为必须有一种方法来访问ServiceStack路由结构,以便为我提供所请求服务的类名,或者与所请求服务相关的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));
    }
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);