1

最後の日、私はそれがどのように行われるのか疑問に思いましたか?ユーザーがAJAXを介してデータを要求できることをどのように認証/承認できますか。

今のところ、認証にSESSIONSを使用していますが、これはマイナーな保護にすぎません。

addUserToGroup($ user_id、$ group_id)という関数があり、これは次のように呼び出されます。

EXAMPLE: www.mysite.com/addUserToGroup/1/2  ( user_id = 1 , group_id = 2 )

このユーザーが本当にgroup_id=2に参加できるかどうかを確認するにはどうすればよいですか?誰もが私のサーバーにデータをPOSTすることができます...

私が見つけた解決策の1つは、jcryption(公開/秘密鍵方式)を使用することです。しかし、user_id=1がgroup_id=2に参加できるかどうかをどうにかして確認する簡単な方法があるはずです。

前もって感謝します!

4

3 に答える 3

2

テーブルusersにフィールドを追加します:is_allowed_to_join_2 int(1)

その人がログインしたら、

$_SESSION['is_allowed_to_join_2'] = $user['is_allowed_to_join_2'] == 1 ? true : false;

そして、ajax呼び出しで、phpコードで:

if( $_SESSION['is_allowed_to_join_2'] !== true )
{
  exit("Not allowed");
}
于 2012-08-17T21:27:36.540 に答える
1

ユーザーがAJAXを介してデータを要求できることをどのように認証/承認できますか。

他のHTTPリクエストをauth/authzするのと同じ方法です。

または今、認証にSESSIONSを使用しています。

セッションは、ユーザーがログインしているかどうか、およびユーザーが誰としてログインしているかを追跡するための賢明な方法です。

このユーザーが本当にgroup_id=2に参加できるかどうかを確認するにはどうすればよいですか?

セッションデータは、ユーザーが誰であるかを示します。

さらに、ビジネスロジックを実装して、グループ2への参加が許可されているかどうかを判断します。ビジネスロジックが何であるかがわからないため、それが何であるかはわかりません。

たとえば、リージョン2の国のユーザーのみがグループ2への参加を許可された場合、ロジックは次のようになります。

IF session exists
AND user is logged in
AND user's country is in region 2
THEN authorized

ユーザーの国がリージョン2にあるかどうかの判断は、次のようなSQLを使用して行うことができます。

SELECT user_id FROM members, countries WHERE user=:username AND members.country=countries.id AND countries.region=:region
于 2012-08-17T21:26:51.257 に答える
1

あなたの質問は認証ではなく承認に関するものだと思います。私が正しければ、おそらくあなたはユーザーが誰であるかをすでに知っいるでしょう(認証、おそらくクッキーか何かを使用する)。

ここで、許可されていること(承認)を決定する方法を考え出す必要があります。

承認ロジックは、実際には重要な設計上の決定事項です。そのため、これは重要であり、データモデルの形状とアプリケーションのアーキテクチャに大きく依存します。

上記のQuentinの応答(ユーザーがグループ2に参加できるように、リージョン2に住んでいるだけで十分な場合)のように、データにルールを適用することでこれを許可する必要があるかどうかを一貫して判断できる場合は、通常、最も簡単に配置できます。エンティティモデルのこのロジック。その場合、ユーザーにメソッドを作成して、グループに参加できるかどうかを確認します...

function canJoinGroup($group) {
    //if(all is well), then:
    return true
} 

または、許可されていない場合にエラーをスローする、それらを結合するメソッドを作成します。

function joinGroup($group) {
    //if(all is well), then:
    return true;
    //otherwise:
    throw new Exception("User ". $this->id ." cannot join group " . $group->id);
} 

この新しいユーザー関数に委任する関数をグループに追加することもできます。

function addUser($user) {
    $user->joinGroup($this);
}

OTOH、よりきめ細かい権限に基づいて、または管理者またはユーザーが実行時に変更できる必要がある情報に基づいて、誰が何を実行できるかについての決定を行う場合は、より多くのことを行う必要があります。一般的に使用される、用途が広く、柔軟なアプローチは、役割ベースのアクセス制御(別名RBAC)と呼ばれます。

これは非常に洗練されたものになる可能性がありますが、ケースに適用されるコアコンセプトは、ユーザー、エンティティ(グループ)、およびオペレーション(参加)があるということです。ユーザー1がグループ2を引数として「join」と呼ばれる操作を実行できるかどうかを判断する必要があります。

これを行うには、一連のルールをどこかに保持してから、次の2つのことを行う必要があります。

  1. 新しいユーザーとグループがシステムに追加されたとき、または管理者が権限を変更したときに、これらのテーブルを最新の状態に保ちます
  2. リクエストごとにこれらのテーブルをチェックして、ユーザーがエンティティで操作を実行できるかどうかを確認します(ユーザーグループに参加できるかどうかを確認します) 。

このユースケースの低レベルの詳細については説明しません。今日達成しようとしていることが最終的にかなり洗練されたアクセス許可システムに成長する必要がある場合は、RBACについて勉強することをお勧めします。

于 2012-08-17T21:55:40.677 に答える