2017-07-20 4 views
2

redisを使用して、ユーザーがWebサイト上の特定の場所に対するアクセス許可を持っているかどうかを確認したいと思います。Redis ACL architecture

このウェブサイトでは、限定された機能を持つグループを作成できます。本質的に2つのタイプのユーザー(潜在的にはより多くのユーザー)、つまり管理者と読者があります。 1人のユーザーが異なるグループ(10〜15グループ)に参加することができます

最初のアイデア - 各ユーザーごとに赤いハッシュを作成し、管理者であるグループと自分がリーダーであるグループを含めます。ログアウト時にレコードを削除し、ログインと変更時にアクセス許可を設定することで、これらを制御できます。また、ハッシュは期限切れになることがあります。

第2の考え方 - 各グループにハッシュを作成し、管理者であるメンバーと読者であるメンバーを格納します。これは、メンバーよりもグループの数が少なくなり、グループの詳細を引き出すことができるという利点があります。

だから私の二つの質問です -

アーキテクチャの面で優れているアプローチは?

私も、私はgroup:1 admins [13,52,12,43]のようなものになってしまいますので、配列は、ユーザーIDを保持しているか、私はすぐに配列を解析することなく、user idを引き出すことができる何か他のものを使用する必要がありますし、ここで、(ハッシュを使用する必要がありますそれをループするたびに?

答えて

2

私はIMOが良いユースケースに合っている、わずかに異なるアプローチを提案したいと思います。

私はあなたのユーザーのそれぞれが固有の識別子を持っていることを前提とは。ことに同意しますあなたは普通の古い数字を使用しています(または、ユーザIDをプレーンにマップするルックアップテーブルがある古い番号)。これ以降、ユーザーは0(最初のユーザー)、1(2番目のユーザー)などと呼ばれます。

また、ユーザーの総数が、システムに持っているでしょう。別の言い方をすれば、何百万人ものユーザーがいますが、グループは数十(多かれ少なかれ)です。

あなたが望むのは、ユーザー(番号)が彼女/彼が所属するグループ(有限、小さなセット)を見つけることです。

BITMAPさんのことを聞いたことがありますか?ビットのインデックスがユーザーIDを表すビットマップを持つことができます.0はユーザーがグループに属していないことを意味し、1は所属を意味します。詳細が必要な場合はLMKを、意味があればこれを答えとしてマークしてください。

+0

以前はBITMAPについて聞いたことがありません。私はレディスにとって新人です。私は今それについて読んでいる。クイック質問 - もし私がそのグループに複数の役割を持っていて、2つだけではないのであれば? – Ando

+0

読書を終えて、それについて考える、必要に応じて新しい質問を開く...;) –

+1

私はそれを手に入れました!素晴らしい答え、Itamar。ありがとう! – Ando