0

、 、、 のようadminに、私の Web サイトにログインする 4 種類のユーザーがいます。それらのそれぞれには、表示するページのセットが異なりますが、いくつかの共通のページもあります。現在、 と の同じログイン画面でそれらを管理する 4 つの異なるテーブルがあります。またはログインすると、アクセスを許可する前に、2 つのテーブルを 1 つずつ確認します。と の別のログイン画面があります。これは受け入れられた方法ですか?superadmincompanyemployeesadminsuperadminadminsuperadmincompanyemployees

実際には、これを、すべてのユーザーを含む単一のテーブルと、ロールを区別するためのロール テーブルに変更したいと考えています。4 テーブルのコンセプトは本当に良くないと思います。以前の開発者は、Web サイトで使用されるテキスト ファイルにユーザー コメントとユーザー アクティビティを保存する習慣があったため、単純に 1 つのテーブルにまとめることはできません。

4 テーブルのログイン システムが悪いと考えるのは正しいですか? Web サイトで直接使用されるテキスト ファイルにログを保存することは良い考えですか?

4

3 に答える 3

5

テーブルが4つ?1 つのユーザー テーブルと、「admin」、「superadmin」、「company」、または「employees」のいずれかのフィールドを使用するだけです。その後、無制限の種類のアカウントを持つことができます。(文字列コードやENUM型フィールドの代わりに、1、2、3、4 などの数値コードを使用します)。

しかし、ええ、あなたの単一のテーブルのアイデアは問題ありません。ロール テーブルが必要な場合は、ロール フィールドに外部キーを作成し、それをロール テーブルにリンクします。ユーザーごとに異なるログインではなく、単一のログインを使用して、その外部キー値に基づいて権限を確認することもできます。

于 2012-08-17T00:19:58.217 に答える
4

これが私の提案です、

ユーザーに4つのテーブルを使用する代わりに、 1つを使用することをお勧めします。

次のような基本的なユーザーテーブルを作成できます(ランクをサイト/スクリプトに適したものに変更します)。

ID username password email bla bla bla rank

したがって、4つのテーブルを使用する代わりに、ユーザーが目的のアクセスレベルを持っているかどうかをPHPスクリプトでチェックすることができます。

アクセスレベルの低いユーザーからページを保護するための簡単な関数は次のとおりです。

function required_level($level){
    $user_level = mysql_return(mysql_query("SELECT $rank FROM `Accounts` WHERE `user_id` =  $user_id"));
    if($user_level<$level){
        header("Location:index.php");
    }
}

次に、各ページで、それにアクセスする下位レベルのユーザーから保護します。電話required_level(4);をかけるだけで、このレベル以上のユーザーのみがページにアクセスできるようになります。

例:

  • ボブは従業員であるため、ユーザーランクは1です。
  • ジョーはスーパー管理者なので、ユーザーランクは4です。

両方のユーザーが正常にログインし、両方がにアクセスしようとしますadmin.php

admin.phpはrequired_level(4);で始まります。そのため、ボブはホームページにリダイレクトされますが(エラーを渡すこともできます)、ジョーのランクはこのページにアクセスするために必要なランクと同じかそれ以上であるため、ジョーはこのページにアクセスできません。

だから、これがあなたができることについての私の超長い説明です!これがユーザーテーブルをより良く、保護ページを作成するのをより簡単にする方法についてのいくつかのアイデアを助け、あなたに与えることを願っています:)

于 2012-08-17T00:40:50.717 に答える
2

まず、1 つのテーブルですべてを実行できます。そのテーブルには、ユーザー名、パスワード、typeofuser、その他の必要な情報などのフィールドが必要です。

次のようなユーザー情報を取得します。

$username = $_POST['username'];  //Retrieving a username from HTML login form
$row = mysql_query(sprintf("SELECT * FROM table WHERE username ='%s'", mysql_real_escape_string($username)));  //Retrieving a row from the database
$res = mysql_fetch_array($row);
$type = $row['typeofuser']; //Retrieving whether it is administrator, super administrator, user, etc.
if ($type == "admin")
    header(Loction:adminpge);

同様に、任意のタイプのユーザーをチェックして、別のページにリダイレクトできます。

于 2012-08-17T00:26:26.510 に答える