2011-01-11 14 views
5

私はカスタム写真CMSシステムを作成しており、ユーザー認証と権限システムを実装する必要があります。このようなスキーマの作成に携わる業界の通常のプラクティスは何ですか?CMSのユーザー権限を構造化する方法

基本的に私はユーザーを必要とし、ユーザーは異なるタイプにすることができます。一部のユーザーは、ギャラリーを作成するだけで、他のユーザーはギャラリーを編集したり、特定のギャラリーなどを編集することはできません。私はMySQLデータベースを使用しており、PHPを使用してCMSをコーディングしています。

私はGoogleで探してみましたが、実際のMySQLデータベースのユーザーを作成する方法を説明した記事しか見つかりませんでした。私は、この種のものがどのように行われるべきかを説明する記事へのリンクを感謝します。

ありがとうございます。

+0

PEAR Live_Userをご覧ください。これは古くて標準的なものではありませんが、ほとんどの権限管理に対応しています。 – mario

答えて

5

この問題には2つの一般的なアプローチがあります。どちらも、許容される操作を名前を付けることのできる別のものに分割することです。 (ポストを削除する、ギャラリーを作成する、コードをアップグレードする、データベースをダンプする、ミサイルを起動する、ガレージドアを開く)ビットベクトルでビットマップを1つずつ与えます(32未満のアクセス権を持つ予定の場合、

したがって、ユーザーを直接アクセス許可にマップすることができます(「I 「をsarnoldに付与したい)、またはユーザークラスを使用してユーザーとアクセス許可を割り当てることができます(「art_curatorクラスのすべてのメンバーにgallery_createを付与してからsarnolddocentからart_curatorに昇格させます)。

ユーザーをアクセス許可に直接マッピングすると、後で展開するときに奇妙なアクセス許可が見つかることがあります。ユーザーをクラスにマッピングすると、特権を持つ特定の人物を信頼するため、他の特権は信頼できないため、人工クラスのユーザーがいるかもしれません。

このマッピングに対処する最善の方法を解明することは、まだ未解決の問題です。私はあなたのシステムがどれほど複雑になるかによって、あまりにも多すぎるかもしれないし、情報が少なすぎるかもしれない異なるタイプの許可モデルModelling a permissions systemについて書いています。

あなたはビットマップでちょうどストアの権限(例えば、LinuxのカーネルのCAP_SYS_ADMINためCAPABLE()の実装、CAP_DAC_OVERRIDE、など)は、あなたがして、新しい権限を追加することができますしたい場合に非常に単純なもの:

if (requested_new_permission == "CAP_SYS_ADMIN") 
    user->permissions |= CAP_SYS_ADMIN; 
else if (requested_new_permissions == "CAP_DAC_OVERRIDE") 
    user->permissions |= CAP_DAC_OVERRIDE; 

if (CAPABLE(user, CAP_SYS_ADMIN)) 
    reboot_server(); 

と:そして、あなたが機能をテストする必要があるとき...

CAPABLE()は次のように見ることができますマクロ:

できるの#define(ユーザー、キャップ)((ユーザー) - >権限&(キャップ​​))

(Cを許して、私は非常によく、PHPを知りません。私はあまりにも多くのPHPバグを修正して、自分でそれを学びたいと思っていました。)

、ユーザークラスを介してアクセス権をユーザーにマップする場合、それは3つの表のようになります。usersテーブル、groupsまたはclassesテーブル、およびpermissionsテーブル。 classesにはuser_idpermission_idの列があります。アクセス権を付与できるかどうかを確認する必要がある場合は、そのユーザーのクラスを選択し、そのクラスのアクセス権を選択します。 (これは、私が手書きのSQLを書いてから数年経ちましたが、1つのクエリでは、はいまたはいいえの回答が得られるはずですが、複数のテーブル結合またはサブクエリを使用するかどうか、データベースへの2つのクエリを作成するほうが簡単でしょう:)

これは役に立ちます。

関連する問題