私は現在、最初のウェブアプリケーション(ERPシステム)を開発中です。私は現在、システムの特権機能を管理しています。私は、ユーザのデータとともにユーザテーブルに権限を保存する予定です。しかし、私は70以上の特権をユーザに与えることができます。私はそのような巨大なテーブルの前に私の短い経験と私は後で私は生産にシステムを置くときにどのような結果になるかわからない、私も間違っていたかどうかを知っている私は非常に苦労して編集する後でアプリケーションがあるので、私はそれが始まる前にここで尋ねると良いと思った。データベースユーザテーブルにユーザ権限を保存しても構いませんか?
は、それがこの
CREATE TABLE `user` (
`id` int(6) unsigned NOT NULL,
`name` varchar(70) NOT NULL,
`type` ENUM('admin','user'),
PRIMARY KEY (`id`)
)
のようなテーブルを変更し、この
`p_insertSales` TINYINT(1) NOT NULL,
`p_insertPurchases` TINYINT(1) NOT NULL,
`p_insertCollections` TINYINT(1) NOT NULL,
`p_deleteSales` TINYINT(1) NOT NULL,
`p_deletePurchases` TINYINT(1) NOT NULL,
`p_manageInventory` TINYINT(1) NOT NULL,
`p_insertEntries` TINYINT(1) NOT NULL,
`p_manageAccountingSystem` TINYINT(1) NOT NULL,
`p_deleteEntries` TINYINT(1) NOT NULL,
`p_approveEntries` TINYINT(1) NOT NULL,
`p_seeFinancialReports` TINYINT(1) NOT NULL,
`p_seeLedger` TINYINT(1) NOT NULL,
`p_manageCashAccounts` TINYINT(1) NOT NULL,
`p_insertCurrentAccounts` TINYINT(1) NOT NULL,
`p_seeVisitorsMessages` TINYINT(1) NOT NULL,
`p_seePurchaseOrders` TINYINT(1) NOT NULL,
-- ... more than 60 more privileges.
のような70個の列について追加してOKです性能とソフトウェア設計の面でそれを行うには、それはOKですか?
私は、フロントコントローラエリアでのリクエスト処理の開始時にとにかくクライアントデータをロードしていますので、この方法は私が維持するのが容易になり、私は追加することによって、(後の権限を変更することができ、それをやったので新しいもの、または取り除く)。
から権限を削除(クラスなど)は、既存の権限
この構造は、それが簡単になりますdba.stackexchange.comに関するさらに多くの質問。そのようにするか、2つのテーブルを追加することができます:ロール/特権のためのものと、2つのテーブルに一致するピボットテーブル。最初の方法は、新しい特権を追加するたびに列を追加することを意味し、2番目の方法はデータを追加するだけです。 – aynber
私はそれは* OK *だと思いますが、それは私がそれをやる方法ではありません。 – Strawberry
私は非常にあなたが計画していることをやっていないことをお勧めします。以下のゴードンの答えは100%です。 「ロール」のユーザー/特権ロジックに余分なレイヤーを追加することを検討することをお勧めします。ロールは複数の権限で定義され、ユーザーはロールを選択します。これにより、新しいユーザをロールに割り当てることができ(そしてバケットを獲得する)、ずっと簡単に行えます。今のところ、特権テーブルとユーザー/特権の間の接合テーブルを持つことは素晴らしいスタートです。 – JNevill