0

これはここでの私の最初の質問であり、質問はまだ存在しないと信じています:)検索しましたが、成功しませんでした。

わかりました、次の問題があります。管理パネルでユーザー権限を取得する方法についてのアイデアが必要です。スーパー管理者、管理者、オペレーターが欲しいです。このwiilの誰もが異なる特権を持っています。スーパー管理者はすべての特権を持ち、管理者は一部、オペレーターは一部ですが、すべてが同じ特権を持つわけではありません。このためのバックエンドロジックが必要です。多くのifステートメントなしでそれを行う方法は、私のコードが見栄えがするようにするためですか?私はSmartyテンプレートエンジンと自分で作成したoopphpを使用しています。Smarty特権で割り当てますが、次は何ですか?誰かが私にアイデアやサンプルコードを教えてもらえますか?

ありがとう!

4

3 に答える 3

3

MVCを使用すると、これは比較的簡単なタスクです。と呼ばれるテーブルにさまざまな役割を作成してから、に接続するpermissionsと呼ばれる別のテーブルを作成します。次に、関数を作成します。おそらく、と呼ばれるクラスに作成します。この関数は、権限エイリアスと最終的にはユーザーIDの2つの引数を受け入れます。user_permissionsuser_idpermission_iduserhas_role()

ビューで関数を呼び出さないようにする場合は、コントローラーで次のようなさまざまな変数を保存できます。これらの変数はビューに渡されます。

$isAdmin = $user->has_role('admin');
$isOperator = $user->has_role('operator');

管理者に一部のコンテンツのみを表示している場合は、ビューで次のようなことを行うことができます。

<?php if($isAdmin): ?>

<p>Admin only content</p>

<?php endif; ?>

ただし、管理者専用のページがある場合は、

if(! $this->user->has_role('role')) {
  header("Location: /index.php");
  die();
}

トリックを行います。もちろん、これはすべてMVCパーツなしで実行できますが、MVCパーツを使用するとさらにクリーンになります。

于 2012-08-10T23:34:12.840 に答える
1

おそらく、管理ビューを分割し(おそらく、ユーザーのタイプごとに異なるUIエクスペリエンスを取得します)、ユーザーの特権に基づいて正しいファイルを含めることで、これを行うことができますか?

ちなみに、これは問題の修正方法を定義するため、OOPフレームワークの動作を知らずに答えるのは非常に困難です。

于 2012-08-10T23:28:10.760 に答える
0
class Session {

    public static function init() {
        @session_start();
    }

    public static function set($key, $value) {
        $_SESSION[$key] = $value;
    }

    public static function get($key) {
        if (isset($_SESSION[$key])) {
        return $_SESSION[$key];
        }
    }

    public static function destroy() {
        //unset($_SESSION);
        session_destroy();
    }

}

後で、ログインphpでロールを設定します。mysqlから取得する$ data['role']:

   Session::init();
   Session::set('role', $data['role']);

たとえば、役割の使用を確認するには、次のようにします。

    $role = Session::get('role');
    if ($role != 'owner') {
        Session::destroy();
        header('location: '.URL.'login');
        exit;
    }
于 2012-08-10T23:51:36.343 に答える