我想要一个CKFinder视图,该视图从两个完全不同的源文件夹中检索内容。这两个文件夹将具有相同的resourceType,例如Images。然后,用户还可以拖动文件。
在我的情况下,一个文件夹将是共享位置,而另一个文件夹将是基于当前用户的动态私有文件夹。我已经通过修改ConfigurationPathBuilder中的getBaseDir函数使路径动态化,但是我无法将两个路径都添加到同一CKFinder实例中。
例如,我将拥有以下三个文件夹:
是否可以在单个CKFinder视图中同时包含“ C:/ images / shared”文件夹和“ C:/ images / users / user1”文件夹,而不会暴露任何其他文件夹?不能使用C:/ images作为baseDir,因为它将包括users和user2文件夹。
我目前正在使用CKFinder2,但我也会接受CKFinder3的答案。
我找到了以下资源,但由于我还定义了不同的resourceTypes(如Documents),因此无法使用,我也想以相同的方式使用它:
https://ckeditor.com/old/forums/Support/How-can-I-provide-a-shared-folder
我创建了一个符合我期望的模拟屏幕截图,而不是只有一个“ Images”文件夹,而是两个文件夹,每个来源一个:
答案 0 :(得分:0)
从您的描述来看,我认为您正在使用Java的CKFinder 2.x(我听说他们目前在Alpha阶段已安装CKFinder 3 for Java,因此有可能很快发布新版本)。如果是这种情况,那么我就是这样:
您的目录结构应如下所示:
Userfiles
adam
files
images
flash
joe
files
images
flash
…
john
files
images
flash
Public
将CKFinder(例如joe)加载到CKFinder中后,应该显示为(方括号是您在CKFinder中看到的内容,旁边是目录路径):
(Userfiles == userfiles/joe)
[Files] - /userfiles/joe/files/
[Images] - /userfiles/joe/images/
[Flash] - /userfiles/joe/flash/
[Public]
[Basket]
用户专用文件夹被视为userfiles文件夹,在其中,您将拥有3种默认资源类型:文件,图像,Flash和一个新的Public(可以删除不需要的资源)。当您将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
文件夹) )。
对于第二种解决方案,您将需要手动集成方法(在该方法中,您将不得不从网址中丢失type
参数)
https://docs-old.ckeditor.com/CKFinder_2.x/Developers_Guide/Java/CKEditor_Integration#Manual_Integration