从您的描述来看,在我看来您正在使用 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/joe 或 http://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。您必须根据会话变量(用户凭据)返回正确的 baseUrl 和 baseDir。
如有必要,您还可以调整 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