2009-07-18 8 views
1

私はどのように進めるのか分かりません。私はWebアプリケーションのアイディアを持っていますが、最初にやるべきことが分かりません。私のアプリケーションに認証と認証の必要がある場合は、最初にそれを作成して残りのプログラムを作成するのですか、それとももう少し楽しいものを最初に行い、後でユーザー認証をプラグインしますか?セキュリティモデルをどのように設計すればよいですか?

どのようにプラグインしているのかわかりません。すべてのページの上部またはページモジュールのすぐ上にIsRole関数(自作関数)がありますか?

if user is in the role 
they can see this 
end if 

私はphpとcodeigniterを使用しています。私はそこにいくつかのユーザーモジュールがあることを知っています。私はそれらをいつプラグインするのか分かりません。

また、すべて同じメソッドを使用するわけではありません。 1つのアプリはイントラネットアプリなので、私は広告とLDAPを使用します。

if you're a facebook user 
    you can play this game 
end if 

は、任意の助けをありがとう:一つは、FacebookやCodeIgniterのは、(私はFacebookがセキュリティモニタなっ推測するが、再び、私は私のコードでそれを置く方法をとき、または知らない)を使用することを個人的です。

答えて

2

プログラムをテストして、正しく動作することを確認してください。その後、認証システムを設計するか、他の人を使用してください。

認証システムを実装するには、ユーザーが現在その役割を果たしているかどうかを単にtrueまたはfalseで返すisRole()関数、yesが最適です。シンプルで簡単ですが、isAdmin()、isMod()、isLogged()などの複数のisRole()関数が必要な場合は、実装が非常に簡単です。

もう1つの解決策はcheckPermissions($ permission)を作成することです。ここで、Userには権限を表すIDのセットがあり、特定のIDをチェックします。認証システムを設計する多くの方法があります。

を拡大

はあなたがIDのリストを持っているとしましょう。 (Add = 1、Edit = 2、Delete = 3)。これらの変数を文字列に格納し、どこかに保存することができます。 ($ _SESSION Varaible?) その後、権限を見たいときは、文字列をつかんで、区切り文字で爆発させてください。次に、結果の配列にアクセス権があるかどうかを確認します。例:セキュリティをどこに配置するかについては

// User Permissions are in a string, delimited by '|' 
$string = "1|2"; 

$permissions = explode("|", $string); 

// This will return false; 
$check_permission = "3"; 

// This will return true; 
$check_permissions = "1"; 

if(in_array($check_permissions, $permissions)) 
{ 
    return true; 
} 
else 
{ 
    return false; 
} 

、おそらく最良かつ最もまっすぐ進むのソリューションは、スクリプトの先頭にそれを置くことです。

if(is_logged()){ 
    echo "Logged In"; 
    } 
    else{ 
    die("Denied"); 
    } 
+0

ありがとうございました。私は最後の段落に従っているかどうかはわかりません。あなたはリンクを持っていますか? – johnny

+0

私は展開します。ちょっと待ってください。 –

+1

あなたは行き​​ます。 IDベースの認証システムについての最後の段落を拡張しました。 –

1

私はそれ以外の場合は、スパゲッティコード実際に素早くであることが判明する可能性があり、可能な限りこのように多くを集中しようとするだろう。すべてのページにコードを記述する必要はなく、ヘッダファイルにインクルードします(そこにはアイデアのためのMVCデザインパターンがあります)。

方法: validateAccess($ユーザー、$ページ)

その後、あなたのユニットテスト: テスト(validateAccess( 'ジョー'、 'game1'); テスト(validateAccess( 'ジョー'、「game2 '); テスト(validateAccess(' ジル」、 'game1');

validateAccess()を呼び出すことができます: validateLDAPAccess() validateDBAccess() ...

戦略パターンはWORでしょうそのためにk。

1

私の助言、FWIWは今それについて考えて後で行うことです。どんな種類のセキュリティ制限が必要かを決定します。ほとんどの制限が「ユーザーがログインしていない場合はページを見ることができない」のような単純なものになっても、今は実装するのは気にしないでください。展開に近づくと、すべてのページの上部に小切手を追加することができます。

しかし、ログインしているかどうか、誰が誰であるか、誰が誰であるか、誰が誰であるかを見ることができるかどうかについて細かく決定する必要がある場合は、単純な述語システム(isAdmin、isSignedIn、等)及びmock it allを出力する。

+0

+1 ...まず、実際のビジネスロジックを書いておきましょう。終了したら、あなたの構造を見て、それを最もシンプルなところに実装してください。そうすれば、それはきれいに集中化され、維持可能になります。あなたのモデルやフロントエンドコントローラ、どこにでも置くかどうかは、まず自分のフローを持つアプリケーションを用意して、そのフローにアクセス制御を入れる方法を考えなければなりません。 。 – back2dos

関連する問題