0

私はpostgreSQLの初心者です。バージョン9.1を使用しています。さまざまなユーザーがさまざまな権限を持つログインシステムを作成したいと考えています。

私が心に留めていることは....

単純なユーザーがいます。彼を「訪問者」と呼びましょう。彼は users テーブルから「選択」することしかできません。誰かがサインインするためのログイン名とパスワードを与えると、php はログイン名とパスワードを取得し、「訪問者」としてデータベースに接続します。一致するペアが見つかった場合 (テーブル内の log/pass given-log/pass が同じ)、次のようにセッションを開始します。

session_start();
        $_SESSION['authenticated']=true;
            while ($arr=pg_fetch_array($r)) {

ユーザーのIDを保存しましょう

$_SESSION['c_id']=$arr['c_id'];

ユーザーの「ロール」を保存します。Role は単純な int で、users テーブルにあります。各ユーザーの権利を定義します。1 の場合、ユーザーはテーブルを更新/挿入/削除できます。2 の場合、ユーザーは 2 つのテーブルを更新/挿入/削除でき、3 の場合は、「レベル」1 および 2 (スーパーユーザー) で 2 つのテーブルを更新/挿入/削除し、新しいユーザーを追加することもできます。

これは単に、各ユーザーが異なるメニューを持っていることを意味するので、単純な「if」を使用して、異なるメニューに誘導してみましょう。

$_SESSION['role']=$arr['role'];

if ($_SESSION['role']==1){header('Location:menouOne.php');} 
elseif ($_SESSION['role']==2) {header('Location:menouTwo.php');} 
elseif ($_SESSION['role']==3) {header('Location:menouThree.php');}

たとえば、menouOne には「更新/削除/挿入」のみがあり、menouThree には menuouOne に加えて「新しいユーザーの追加」もあります。

この慣行は私には良さそうに思えますが、非常に多くの異なるファイルを作成する必要があります。

それで、私の質問

  1. これは良い習慣ですか、それとももっと簡単で速い方法がありますか?

  2. postgreSQL での新しいユーザーの作成に関するリンクはありますか? いくつか見つけましたが、まだ混乱しています。

  3. postgreSQL への md5 セキュリティの追加に関するリンクはありますか?

ありがとうございました

4

1 に答える 1

0

個人的には、すべてのユーザーを同じページに送り、switchそのページ内のさまざまな設定に送ります。

例えば

<?
$_SESSION['role']=$arr['role'];
header("location:themenu.php");
exit;
?>

<?
//themenu.php
session_start();
switch($_SESSION['role'])
{
    case 1://html for role 1
    {
        $controls['update'] = '<div id="contr_update">update</div>';
        $controls['delete'] = '<div id="contr_delete">delete</div>';
        $controls['insert'] = '<div id="contr_insert">insert</div>';
        break;
    }
    case 2://html for role 2
    {
        $controls['update'] = '<div id="contr_update">update</div>';
        $controls['delete'] = '<div id="contr_delete">delete</div>';
        $controls['insert'] = '<div id="contr_insert">insert</div>';
        $controls['adduser'] = '<div id="contr_adduser">add new user</div>';
        break;
    }
    case 3://html for role 3
    {
        $controls['update'] = '<div id="contr_update">update</div>';
        $controls['delete'] = '<div id="contr_delete">delete</div>';
        $controls['insert'] = '<div id="contr_insert">insert</div>';
        $controls['adduser'] = '<div id="contr_adduser">add new user</div>';
        $controls['other'] = '<div id="contr_other">other functions</div>';
        break;
    }
    default:
    {
        header("location:login.php");
        exit;
    }
}
?>
<html>
<head>
...
</head>
<body>
...some html
<? echo $controls['update']; ?>
...some more html
<? echo $controls['delete']; ?>
...some more html
<? echo $controls['insert']; ?>
...some more html
<? echo $controls['adduser']; ?>
...some more html
<? echo $controls['other']; ?>
</body>
</html>

パスワードをデータベースに保存するときは、MD5 で暗号化して、ユーザーがログインしたときに提供されたパスワードと比較できるようにする必要があります。

$password = md5($password); $password をデータベースに保存します。

ユーザーがログインしたら、上記と同じことを行い、2 つの暗号化されたパスワードを比較して一致するかどうかを確認します。

于 2013-02-19T19:40:09.257 に答える