我有一个像 Google+ 或 Facebook 这样的图片库,我想避免未经授权的人在以其他方式联系控制器 (../GetImage/test) 时显示图片。
图像保存在文件系统和数据库中图像的路径。
当图像是公开的或与用户共享时,用户只能显示图像。我想避免对控制器的请求(../GetImage/test)进行 SQL 查询(以检查用户是否可以显示图像),因为当我想加载 500 时,我认为这不是一个好习惯图像一次。
是否有更好的做法来检查用户是否有权显示图像?
我有一个像 Google+ 或 Facebook 这样的图片库,我想避免未经授权的人在以其他方式联系控制器 (../GetImage/test) 时显示图片。
图像保存在文件系统和数据库中图像的路径。
当图像是公开的或与用户共享时,用户只能显示图像。我想避免对控制器的请求(../GetImage/test)进行 SQL 查询(以检查用户是否可以显示图像),因为当我想加载 500 时,我认为这不是一个好习惯图像一次。
是否有更好的做法来检查用户是否有权显示图像?
您需要构建您的数据模型,以便您对图像的请求包含与您的授权系统的连接,这样您就无法访问您无权访问的图像,并且它发生在单个查询中。
由于我不知道您的数据模型是如何构建的,所以我只能给您一个基本示例,并且我假设您正在使用 Entity Framework 进行数据访问。
public string GetImage(int id) {
using (var db = new DataEntities()) {
return imagePath = (from i in db.Images
where i.AuthorizedUsers
.Any(x => x.UserName == User.Current.Name)
&& i.id == id
select i.ImagePath).FirstOrDefault();
}
}
当然,如果未经授权的用户拥有图像的 URL,这不会阻止未经授权的用户获取图像,因此您需要直接返回图像,而不仅仅是路径。
所以是这样的:
public ActionResult GetImage(string id)
{
// code from above
var dir = Server.MapPath("imagePath");
return base.File(path, "image/jpeg");
}