0

私が構築しているアプリケーションには、ある種の許可システムが必要です。自分で建てたい。現在、いくつかのオプションがあります。

  • アクセス制御リスト
  • ロールベースのシステム
  • グループベース

私は ACL が少し上にあることに気付きました。ロール ベースは、リソースがわかっている場合にのみ実際に機能し、グループベースが私が傾倒しているものですが、問題があります。

私は、ユーザーがアーティストを編集できるシステムを持っています(つまり、スーパーファン)。これに適したすべてのユーザーは、ある種のグループ/ロールに入ります。しかし、どうすれば (ここで動的な部分が登場します)、それらを単一のアーティストに任命できますか? 1アーティストにつき5人までと考えていました。

だから基本的に; ユーザーベースの権限も許可するグループベースの権限システムが必要です。

ACL が必要だと書いているのですが、can_edit_u2、can_edit_bonjovi、can_edit_thebeatles などのリソースを作成できません。

4

1 に答える 1

1

テーブル構造で簡単に説明:

ユーザー

id |    username    |
1  |    John        |
2  |    Michael     |

アーティスト

id |    name        |
1  |    Bon Jovi    |
2  |    Beatles     |

編集することができます

id |    artist_id   |    user_id    |
1  |    1           |    1          |
2  |    1           |    2          |
3  |    2           |    2          |

スクリプト ロジックは、これを次のように解釈する必要があります。ジョンはボン ジョヴィを編集できますが、マイケルはボン ジョヴィとビートルズの両方を編集できます。

たとえば、ジョンがログオンしている場合、セッション変数をその user_id -> とともに保存する必要があります$_SESSION['id'] = 1

次に、ユーザーは Beatles を編集しようとしています。あなたのロジックチェック:

SELECT tb1.name, tb2.user_id
FROM artists AS tb1.
INNER JOIN can_edit as tb2
ON tb1.id = tb2.artist_id
WHERE tb1.name = 'Beatles'


name    |    user_id   |
Beatles |     2        |

これで、PHP で結果をフェッチするコードがいくつかできました。

if ($_SESSION['id'] == $row['user_id']) {  // if the output of the session variable (1) is equal to the output of the query (2)
... // allow editing
}
else {
... // don't allow
}

この例では、$_SESSION['id'] は $row['user_id'] と等しくないため、John は Beatles を編集できません。

于 2013-04-15T19:03:51.767 に答える