hook_file_download的示例


8

如何根据内容类型限制对某些文件的访问?我有注册用户的下载部分,我想防止他们在我的网站之外的地方发布链接。

实施是否hook_file_download()足够?

我尝试了这段代码,对于我的目的来说已经足够了,但是的文档hook_file_download()并没有太大帮助。

function customize_file_download($uri) {
  global $user;
  if (!array_intersect(array('administrator','editor','expert','verified'), array_values($user->roles))) {
    return 1;
   }
}

也许我发布了示例,并希望它有助于形象化我有具有字段文件的 content_type 文件(设置私有下载方法),然后我需要保护此文件以防止未经授权的人员访问它(基于用户角色)?最好的方法是什么?只需检查一下用户在hook_file_download中是否具有正确的角色即可,仅此而已?
帕里(Pari)

Answers:


8

在drupal 7中有几个钩子来限制对文件的访问。

您必须意识到的一件事是,只有当您的下载方法是私有的并且文件在您的私有路径中时,这些访问挂钩才起作用。

正如您在问题中提到的那样,有一个hook_file_download应该适合您的情况(假设文件是​​私有的)。如果有人链接到的文件是公共位置(例如,sites / default / files / abc123.txt),则此操作将无效。

如果您恰巧在字段中上传这些私有文件,那么hook_file_download_access似乎更合适。这将为您提供文件所属的字段以及正在使用该字段的相关实体,因此您应该能够执行更复杂的逻辑,例如调用适当的访问函数来检查用户是否有权访问字段,而不是在代码中包含硬编码列表。


具有私有文件系统的hook_file_download不会为匿名用户调用。知道为什么吗?
Jeet 2013年

1
我认为是因为匿名用户不应该访问私有文件。
DrCord 2014年

0

指向文件的链接就是链接。我认为无法确定链接的位置。您可能可以查看标题,但这可能无法正常工作。

如果可以确定文件链接的位置,则使用hook_file_download将是访问控制的不错选择。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.