【问题标题】:Is it possible to combine multiple baseDirs in one CKFinder view?是否可以在一个 CKFinder 视图中组合多个 baseDirs?
【发布时间】:2019-06-12 13:11:07
【问题描述】:

我想要一个 CKFinder 视图,它可以从两个完全不同的源文件夹中检索内容。这两个文件夹将是相同的资源类型,例如图像。然后用户也可以拖动文件。

在我的例子中,一个文件夹是共享位置,另一个是基于当前用户的动态私人文件夹。我已经通过修改 ConfigurationPathBuilder 中的 getBaseDir 函数使路径动态化,但我无法将两条路径添加到同一个 CKFinder 实例。

例如,我会有以下三个文件夹:

  • C:/images/shared
  • C:/images/users/user1
  • C:/images/users/user2

是否可以在单个 CKFinder 视图中同时拥有“C:/images/shared”文件夹和“C:/images/users/user1”文件夹而不暴露任何其他文件夹?使用 C:/images 作为 baseDir 不是一个选项,因为它将包含 users 和 user2 文件夹。

我目前正在使用 CKFinder2,但我也接受 CKFinder3 的答案。

我找到了以下资源,但这不适用于我的情况,因为我还定义了不同的资源类型(如文档),我也想以同样的方式使用它们:

https://ckeditor.com/old/forums/Support/How-can-I-provide-a-shared-folder

我根据自己的期望创建了一个模拟屏幕截图,而不是只有一个“图像”文件夹,而是有两个文件夹,每个来源一个:

https://i.imgur.com/l6fKHRL.png

【问题讨论】:

    标签: ckfinder


    【解决方案1】:

    从您的描述来看,在我看来您正在使用 CKFinder 2.x for Java(我听说他们目前有 CKFinder 3 for Java 处于 Alpha 阶段,因此有可能很快发布新版本)。如果是这样的话,那么我是这样看的:

    您的目录结构应如下所示:

    Userfiles
       adam
          files
          images
          flash
       joe
          files
          images
          flash
       …
       john
         files
          images
          flash
    Public
    

    在将(例如对于 joe)加载到 CKFinder 后应该可以看到(方括号是您在 CKFinder 中看到的内容,旁边是目录路径):

    (Userfiles == userfiles/joe)
    [Files] -  /userfiles/joe/files/
    [Images] -  /userfiles/joe/images/ 
    [Flash] -  /userfiles/joe/flash/
    [Public]  
    [Basket]
    

    用户私有文件夹被视为 userfiles 文件夹,其中您将拥有 3 种默认资源类型:文件、图像、Flash 和一种新的公共(您可以删除不需要的资源)。当您将 CKFinder 与 CKEditor 一起使用时,这种方法效果很好,因为您保留了 CKfinder 期望的默认资源类型结构,因此您无需进行进一步调整。

    这些资源类型必须在 CKFinder 的配置文件中定义,但您可能知道这一点。默认资源类型已经存在,但必须添加新的。

    baseURL 会根据用户凭据进行更改。它可以是例如http://yourapp:8080/ckfinder/userfiles/joehttp://yourapp:8080/ckfinder/userfiles/john。在 ASP.NET 或 PHP 等连接器中,您可以检查用户凭据并直接在配置文件中应用正确的 userfiles 文件夹,例如

    If( user.name.equals('joe') )
    baseUrl = 'http://yourapp:8080/ckfinder/userfiles/' + request.get( ’joe’);
    

    在 Java 中,您需要使用 Pathbuilder: https://docs-old.ckeditor.com/CKFinder_2.x/Developers_Guide/Java/Configuration/Extending#Creating_a_Custom_PathBuilder_Class。您必须根据会话变量(用户凭据)返回正确的 baseUrlbaseDir

    如有必要,您还可以调整 ACL。假设您想要对私有文件夹的所有完全访问权限和对 pblic 文件夹的只读访问权限:

    <accessControl>
     <role>*</role>
     <resourceType>*</resourceType>//Full access to any folder or file by default
     <folder>/</folder>
     <folderView>true</folderView>
     <folderCreate>true</folderCreate>
     <folderRename>true</folderRename>
     <folderDelete> true</folderDelete>
     <fileView>true</fileView>
     <fileUpload>true</fileUpload>
     <fileRename>true</fileRename>
     <fileDelete>true</fileDelete>
    </accessControl>
    <accessControl>
     <role>*</role>
     <resourceType>Public</resourceType> // Restricted access to Public resource type.
     <folder>/</folder>
     <folderView>true</folderView>
     <folderCreate> false </folderCreate>
     <folderRename>false</folderRename>
     <folderDelete>false</folderDelete>
     <fileView>true</fileView>
     <fileUpload> false </fileUpload>
     <fileRename> false </fileRename>
     <fileDelete> false </fileDelete>
    </accessControl>
    

    请记住,CKFinder 只是您的应用程序的一个附加组件,它仅根据来自该应用程序的数据来决定谁以及如何访问 CKFinder。所有用户配置(如 ACL)、映射到适当的用户文件夹、他的凭据和您希望个性化的其他 CKFinder 设置都应保存在数据库中并在用户登录时加载。接下来是您的应用程序必须将该数据放入例如会话以允许 CKFinder 读取和应用它。

    注意:当 CKFinder 与 CKEditor 集成时,它默认使用默认资源类型。这可能会导致非默认的Public 文件夹出现问题。 它可能仅对链接按钮可见,而对图像不可见。 这里有两种解决方案 - 您可以限制对公共文件夹的访问(仅从链接对话框)或显示所有文件夹,无论按下哪个按钮(默认情况下,当从图像对话框调​​用 CKFinder 时仅显示 images 文件夹)。 对于第二种解决方案,您将需要手动集成方法(您将不得不从 URL 中丢失 type 参数) https://docs-old.ckeditor.com/CKFinder_2.x/Developers_Guide/Java/CKEditor_Integration#Manual_Integration

    【讨论】:

    • 感谢您抽出宝贵时间回答我的问题。我的情况和你描述的有点不同。从您的示例中获取树结构,我不想要一个能够查看 adam 的所有子文件夹和文件的 CKFinder 实例。我正在寻找一个 CKFinder,它可以查看所有图像文件夹,但无法查看用户拥有的其他文件夹。最后,我们找到了一个解决方案,它只显示多个按钮,每个按钮都打开自己的 CKFinder。我们已经覆盖了 ConfigurationPathBuilder 的 getBaseUrl 和 getBaseDir 函数。
    • 如果您只想使用图像,那么您需要在 CKFinder 配置中为图像定义单一资源类型 - docs-old.ckeditor.com/CKFinder_2.x/Developers_Guide/Java/…
    • 如果您希望有几个文件夹,但在从图像或链接对话框调用 CKFinder 时只显示一个,请使用手动集成方法并将 type 参数设置为资源类型名称,例如type=Files。请看:docs-old.ckeditor.com/CKFinder_2.x/Developers_Guide/Java/…
    猜你喜欢
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    相关资源
    最近更新 更多