2016-07-04 19 views
1

私はAsp.NET MVC 5を使ってWebアプリケーションを構築しています。私はCkeditorとCKfinder Connector for ASP.NETをダウンロードしました。私は指示に従って、CkeditorとCkfinderの統合を働かせることができました。CKfinder-ダイナミックユーザフォルダ-Asp.net MVC 5

私は、ログインしたユーザーごとにCkFinderで動的フォルダディレクトリを作成する方法を理解しようとしています。 http://docs.cksource.com/ckfinder3-net/howto.html#howto_private_foldersで提供されている指示に従って、connectorBuilder .SetRequestConfigurationでそれを行うように指示します。問題は、ConnectorBuilderが起動時に設定されていて、その後にユーザーがログインしてしまうことです。すべてが

using DearColleagueV2.Models; 

[assembly: Microsoft.Owin.OwinStartup(typeof(DearColleagueV2.Startup))] 

namespace DearColleagueV2 
{ 
    using System.Configuration; 

    using CKSource.CKFinder.Connector.Config; 
    using CKSource.CKFinder.Connector.Core.Builders; 
    using CKSource.CKFinder.Connector.Core.Logs; 
    using CKSource.CKFinder.Connector.Host.Owin; 
    using CKSource.CKFinder.Connector.Logs.NLog; 
    using CKSource.CKFinder.Connector.KeyValue.EntityFramework; 
    using CKSource.FileSystem.Dropbox; 
    using CKSource.FileSystem.Local; 

    using System; 
    using Microsoft.AspNet.Identity; 
    using Microsoft.AspNet.Identity.Owin; 
    using Microsoft.Owin; 
    using Microsoft.Owin.Security.Cookies; 

    using Owin; 
    using Microsoft.Owin.Security; 
    using CKSource.CKFinder.Connector.Core.Acl; 
    using System.Collections.Generic; 
    using CKSource.CKFinder.Connector.Core.Authentication; 
    using System.Threading.Tasks; 
    using CKSource.CKFinder.Connector.Core; 
    using System.Threading; 
    using System.Security.Cryptography; 
    using System.Text; 

    public partial class Startup 
    { 
     public void Configuration(IAppBuilder builder) 
     { 
      LoggerManager.LoggerAdapterFactory = new NLogLoggerAdapterFactory(); 
      ConfigureAuthForIdentity(builder); 

      RegisterFileSystems(); 

      var connectorBuilder = ConfigureConnector(); 
      var connector = connectorBuilder.Build(new OwinConnectorFactory()); 
      builder.Map("/CKFinder/connector", builder1 => builder1.UseConnector(connector)); 
     } 

     private void ConfigureAuthForIdentity(IAppBuilder app) 
     { 
      // Configure the db context, user manager and signin manager to use a single instance per request 
      app.CreatePerOwinContext(ApplicationDbContext.Create); 
      app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 
      app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create); 

      // Enable the application to use a cookie to store information for the signed in user 
      // and to use a cookie to temporarily store information about a user logging in with a third party login provider 
      // Configure the sign in cookie 
      app.UseCookieAuthentication(new CookieAuthenticationOptions 
      { 
       AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
       LoginPath = new PathString("/Account/Login"), 
       Provider = new CookieAuthenticationProvider 
       { 
        // Enables the application to validate the security stamp when the user logs in. 
        // This is a security feature which is used when you change a password or add an external login to your account. 
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
         validateInterval: TimeSpan.FromMinutes(30), 
         regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
       } 
      }); 
      app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

      // Enables the application to temporarily store user information when they are verifying the second factor in the two-factor authentication process. 
      app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5)); 

      // Enables the application to remember the second login verification factor such as phone or email. 
      // Once you check this option, your second step of verification during the login process will be remembered on the device where you logged in from. 
      // This is similar to the RememberMe option when you log in. 
      app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie); 


     } 

     public ConnectorBuilder ConfigureConnector() 
     { 
      var connectorBuilder = new ConnectorBuilder(); 
      connectorBuilder 
       .SetRequestConfiguration(
        (request, config) => 
        { 

         //config.AddProxyBackend("local", new LocalStorage(@"MyFiles")); 
         var userName = request.Principal?.Identity?.Name; 
         if (userName != null) 
         { 
          var sha = new SHA1CryptoServiceProvider(); 
          var hash = sha.ComputeHash(Encoding.UTF8.GetBytes(userName)); 
          var folderName = BitConverter.ToString(hash).Replace("-", string.Empty); 
          config.AddProxyBackend("local", new LocalStorage(@"c:\files")); 
          config.AddResourceType("private", resourceBuilder => resourceBuilder.SetBackend("local", folderName)); 
          config.SetThumbnailBackend("local", "thumbs");        
          config.AddAclRule(new AclRule(
        new StringMatcher("*"), new StringMatcher("/"), new StringMatcher("*"), 
        new Dictionary<Permission, PermissionType> 
        { 
         { Permission.FolderView, PermissionType.Allow }, 
         { Permission.FolderCreate, PermissionType.Allow }, 
         { Permission.FolderRename, PermissionType.Allow }, 
         { Permission.FolderDelete, PermissionType.Allow }, 

         { Permission.FileView, PermissionType.Allow }, 
         { Permission.FileCreate, PermissionType.Allow }, 
         { Permission.FileRename, PermissionType.Allow }, 
         { Permission.FileDelete, PermissionType.Allow }, 


         { Permission.ImageResize, PermissionType.Allow }, 
         { Permission.ImageResizeCustom, PermissionType.Allow } 
        })); 
         } 
        }) 
       .SetAuthenticator(new MyAuthenticator()); 

      return connectorBuilder; 
     } 

     private static void RegisterFileSystems() 
     { 
      FileSystemFactory.RegisterFileSystem<LocalStorage>(); 
      FileSystemFactory.RegisterFileSystem<DropboxStorage>(); 
     } 

    } 

    public class MyAuthenticator : IAuthenticator 
    { 
     public Task<CKSource.CKFinder.Connector.Core.Authentication.IUser> AuthenticateAsync(ICommandRequest commandRequest, CancellationToken cancellationToken) 
     { 
      var user = new User(true, null); 
      return Task.FromResult((CKSource.CKFinder.Connector.Core.Authentication.IUser)user); 
     } 
    } 
} 
+0

書式設定以外の変更内容がわかりません。 – GPS

答えて

2

ConnectorBuilderクラスのSetRequestConfiguration方法は、リクエストごとに呼び出されるアクションを受け入れアイコンを除いて働くのはここ

は私が今持っているコードです。

リンクされたサンプルのコードは、起動時に定義されますが、すべての要求に対して実行されます。

また、CKFinderを使用しようとしているときに、そのユーザーが既にログインしていることを確認する必要があります。例:

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     var connectorFactory = new OwinConnectorFactory(); 

     var connectorBuilder = ... 

     var connector = connectorBuilder.Build(connectorFactory); 

     app.UseCookieAuthentication(
      /* 
      * Your CookieAuthenticationOptions that will redirect anonymous 
      * users to the login page 
      */ 
      ); 
     app.UseConnector(connector); 
    } 
} 

許容サムネイルサイズを1つ以上追加する必要があります。 SetRequestConfigurationで実行されたアクションにconfig.SetThumbnailSizes(new SizeAndQuality(100, 100, new ImageQuality(80)));のようなものを追加するだけです。

+0

ガイドありがとう!私はユーザーごとに別々のフォルダを作成することができました。今アップロードした画像のサムネイルを見ることができません。ここに私が今まで持っているコードがあります – GPS

+0

あなたはあなたが今持っているコードを含むようにオリジナルの質問を更新してください。 – kfazi

+0

は元の質問を更新しました。ありがとう! – GPS