wwwrootのアクセス制御下の[ベース] netcore静的リソースファイル

オリジナル: wwwrootのアクセス制御の下で、[ベース] netcore静的リソースファイル

ボーは、次の資料の参照を尋ねました

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 = 
            }。
        }
コードをコピー

 

ここでは、ビジネスニーズのカスタムに応じて、あなた自身のためのお問い合わせは、ロジックコードのリソース許可を書くことができます

得ます

 

おすすめ

転載: www.cnblogs.com/lonelyxmas/p/11886635.html