ボーは、次の資料の参照を尋ねました
https://q.cnblogs.com/q/107836
ビジネス要件
のみ購入後のアクセス権を持っているために、アップロードのリソースファイル(.MP3の.MP4など)、そのリソースファイルアップロードディレクトリのアクセス権限の制御
アドレス例
https://ではlocalhost:5001 / 資産/アップロード/画像/ 20181018 / 0d9819d2-14d2-47eb-a763-be9d19c69e42.mp4
wwwrootの下の対応するファイルディレクトリの背後にある、アップロードリソースディレクトリ、通常の状況下では、すべてのユーザーがアクセスすることができ、我々は許可を制御する必要がどこ、ユーザーが唯一の発注書にアクセスすることができます。
最初の
設定は、コードファイルのメソッドStartup.cs以下に配置しました
app.UseWhen( C => c.Request.Path.Value.Contains(" 資産" )、 _ => _.UseMiddleware <AuthorizeStaticFilesMiddleware> ()); app.UseStaticFiles();
ここでは、要求に対処するためにAuthorizeStaticFilesMiddlewareミドルウェアにキーワードが含まれて判断させていただきます。
AuthorizeStaticFilesMiddleware代码
使用してGeduData.Serverを。 使用してGeduService.Interfaceを。 使用してGeduService.Reqを。 使用してMicrosoft.AspNetCore.Authenticationを。 使用してMicrosoft.AspNetCore.Authorizationを。 使用してMicrosoft.AspNetCore.Httpを。 使用してSystem.Threading.Tasksを。 名前空間GeduDistributionApi.Extension { パブリック クラスAuthorizeStaticFilesMiddleware { プライベート 読み取り専用RequestDelegate _next。 プライベート 読み取り専用IResourceService _resourceService。 公共AuthorizeStaticFilesMiddleware( RequestDelegate次 、IResourceService resourceService ) { _next = 次回。 _resourceService = resourceService。 } 公共の 非同期タスクの起動(のHttpContextコンテキスト、IAuthorizationService authorService) { VAR URL = context.Request.GetAbsoluteUri(); VAR SID = context.Request.Headers [ " SID " ] .ToString(); もし(文字列.IsNullOrEmpty(SID)) { スロー 新しい(GeduExceptionを「リソース403禁断のsidは空です」); } VaRの結果= _resourceService.ValidateResourceAuthor(新しいValidateResourceAuthorReq { URL = urlには、 SID =によるSID、 }); もし(result.IsSucess == 偽) { await context.ForbidAsync()。 } await _next(コンテキスト)。 } } }
ここでは、SIDリクエストヘッダを取得、このSIDは、私たち自身の定義を記録するために許可され、それがユーザー情報が付属してトークン、として理解することができます
ここでは、ビジネス・ロジック・コードは、参考のために、あります
公共ValidateResourceAuthorResp ValidateResourceAuthor(ValidateResourceAuthorReq REQ) { た loginUser = UserHelper._GetUser(req.SID)。 もし(文字列.IsNullOrEmpty(req.Url)) { スロー 新しい(GeduExceptionを" URLが空です" ); } // https://ではlocalhost :5001 /資産/アップロード/画像/ 20181018 / 0d9819d2-14d2-47eb-a763-be9d19c69e42.jpg req.Url = req.Url.Trim()TOLOWER();。 もし(req.Url.EndsWith(" .MP4 ")|| req.Url.EndsWith(" .MP3 " )) { // ... } リターン 新しいValidateResourceAuthorResp { IsSucess = 真、 }。 }
ここでは、ビジネスニーズのカスタムに応じて、あなた自身のためのお問い合わせは、ロジックコードのリソース許可を書くことができます
得ます