使用imageresizer自定义动态授权图像

时间:2012-07-30 14:57:04

标签: authorization asp.net-mvc-4 imageresizer

我正在尝试使用ImageResizer并且正在寻找一种好的方法来动态授权用户访问基于角色,组等的图像(和其他文件),从而限制图像访问。我读到ImageResizer支持Url授权,但不确定程度(只有当我实现它时才会跟随或有助手)。优选地,还可以使用其磁盘高速缓存模块。看到一些关于实现自定义URL授权的一般信息,但不确定它是否只是设置图像路径的授权,就像任何其他资源一样,然后让imageresizer工作。或者如果某些逻辑应连接到imageresizer。在这里找到一些关于网址授权的nfo,但我想我不是第一个实现这个组合的人吗?

我看到的最佳设置是限制,如果身份验证未授予访问权限,则不会在线提供任何文件(图像,图像,缓存图像或其他文件)。

因此,寻找有关声音和相当安全的实现的更多信息/详细信息,或许样本实现/代码存在于我尚未找到的地方?

编辑:计算机语言学链接给了我很多我想要的东西。但有两件事让我印象深刻。 1.是否有任何最佳实践可以减少事件处理程序中的内容,或者我可以为此特定目的构建服务并在处理程序中使用它? 2.因为这将针对每个图像触发,我猜想避免直接dbcalls进行权限检查(即尝试设置缓存相应用户的权限的方法)?或者这个实际意义通常很小,无关紧要?在考虑它时,User.IsInRole是否不直接使用dbcalls来确定成员身份?

1 个答案:

答案 0 :(得分:2)

你过分思考这个。

ImageResizer对源文件,结果和缓存图像应用相同的安全性。

遵循网址授权规则,但允许您通过Config.Current.Pipeline.AuthorizeImage事件完全控制所有图片授权。

处理该事件,您可以访问所有可以想到的请求数据,并且可以根据您需要的任何逻辑设置事件AllowAccess变量以允许或拒绝请求。所有URL重写发生后都会发生此事件,因此,如果您的规则基于物理文件路径而非可见路径,则这是进行授权的最准确位置

此外,您执行的任何通用AuthorizeRequest级别工作都将受到ImageResizer的尊重,因为它在PostAuthorizeRequest之前不会激活。

ImageResizer事件:http://imageresizing.net/docs/events