1

私は Google+ や Facebook のような画像ギャラリーを持っており、許可されていない人がコントローラー (../GetImage/test) とは別の方法で連絡した場合に画像を表示できないようにしたいと考えています。

イメージはファイル システムに保存され、データベース内のイメージへのパスが保存されます。

画像が公開されているか、ユーザーと共有されている場合にのみ、ユーザーは画像を表示できます。コントローラー (../GetImage/test) への要求で SQL クエリ (ユーザーが画像を表示できるかどうかを確認するため) を避けたいと思います。一度に画像。

ユーザーが画像を表示する権限を持っているかどうかを確認するためのより良い方法はありますか?

4

1 に答える 1

2

イメージのリクエストに承認システムへの結合が含まれるようにデータ モデルを構築する必要があります。この方法では、承認されていないイメージにアクセスできず、単一のクエリで実行されます。

あなたのデータ モデルがどのように構成されているか分からないので、基本的な例のみを示します。データ アクセスに 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"); 
}
于 2012-04-06T16:41:46.490 に答える