1

私は現在、奇妙な役割ベースのセットアップを備えた手続き型 PHP サイトを MVC で書き直す必要があるプロジェクトを持っています (私は MVC を初めて使用するので、おそらく codeigniter です)。

現在のサイトでは、データベースにログインしているユーザーのセキュリティ レベルをチェックする一種のフロント コントローラーを使用し、セキュリティ レベルを反映するディレクトリ構造に基づいてページを構築します。

すなわち

ディレクトリ構造:

root
    -admin (sees everything and everyone elses subordinates)
        -- Reports listing managers, and their users
        -- CRUD for managers and their reports
        -- CRUD for users and their reports (types listed below)
    -manager (has users as subordinates, and can see all data related to them)
        -- Reports listing the manager's users
        -- CRUD for users and their reports (types listed below)
    -user (Can only see their own information)
        -- Reports listing the users information (lists, calendars, calls, etc.)
        -- CRUD for users reports (types listed above)

データベースユーザーテーブル疑似

1 = admin
2 = manager
3 = user

UserAccountTable
    id
    pass
    user
    email
    security level (1,2,3)

manager Table
    manager ID
    User Account ID
    other fields containing personal info

user Info Table
    user Info id
    User Account ID
    Manager ID
    other fields containing personal info

フロントコントローラー疑似

load header
load menu
determine level from db
    if 1 load requested file from admin folder
    if 2 load requested file from manager folder
    if 3 load requested file from user folder
load footer

主な質問:

現在の設計に固有の問題はありますか? (回答するために現在の構造に関する詳細が必要な場合はお知らせください)

現在のサイトの上記の構造を考えると、MVC 構造で現在のトップダウン タイプのセキュリティ (1 は 2 と 3 を認識、2 は 3 を認識、3 は 3 のみを認識) を使用してセキュリティを再設計するための堅実なアプローチは何でしょうか?データベースへの最小限の変更で可能ですか?

私はコードを探しているわけではありません (誰かがこのようなことを知っていて、理解を深めるために見ることができれば、それは役に立ちます)、プロセスの概念的な理解を求めているのです。

4

1 に答える 1

0

現在の設計にはいくつかの制限があります。ロールの数が修正され、ロールの権限も修正されました。これを設計するためのより良い方法は、次のようになります。

User Table
----------
id
password
email
.....

permissions Table
-----------------
id
name

roles Table
-----------
id
name

user_roles Table
----------------
userid
roleid

roles_permission
----------------
roleid
permissionid

上記のテーブルデザインでは、ロールに権限を割り当ててから、ユーザーにロールを割り当てることができます。次に、hasPermission()などのヘルパー関数を作成することで、ログに記録されたユーザーが何かにアクセスするために必要な権限を持っているかどうかを判断できます。パフォーマンスを向上させるために、いくつかのビューを作成してユーザーの権限を表示し、ビューに対してクエリを実行して、ユーザーが権限を持っているかどうかを確認することができます。

www.thephpcode.comでcodeigniterWebサイトジェネレーターを設計するときも、同じアプローチに従いました。デモを作成し、管理ポータルを無料でチェックして、UIでどのように機能するかを確認できます。

于 2012-07-04T06:50:57.973 に答える