0

最近、私の会社は私の会社のマーケティングチームを管理するプロジェクトを私に割り当てました。データベースの構造に問題があるか、判断できません。

このプロジェクトには、次のようなアクセスロールがあります。

1)CMO(最高マーケティング責任者)

2)------------ゼネラルマネージャー

3)------------------地域マネージャー

4)------------------------ゾーンマネージャー/州長

5)------------------------------アシスタントマネージャー

6)------------------------------------エリアマネージャー

7)------------------------------------------ユーザー

アクセスレベルは、上記の役割階層に従います。
たとえば、CMOにはフルアクセスがあり、RegionalManagerにはCMOを除くすべてのアクセスがあります。

次に、2番目に重要なのは地域です(複数のゾーン/州を組み合わせた後に地域が作成されます)ゾーン/州(複数の都市を組み合わせた後に作成されます)エリア/都市

これで、すべてのユーザーがデフォルトで任意のエリアに追加されます。次に、管理者が役割と地域または州または地域を割り当てます。最後に、ユーザーは役割と割り当てゾーン/州/市/地域に従ってシステムにアクセスできます。

ユーザーアクセスロールがRegionalManagerであり、Region1のようなリージョンを割り当てる場合、ユーザーは、region1に含まれるすべての州/ゾーンとその都市にアクセスできるようになります。

これらすべてを管理するデータベース構造の設計を手伝ってください。

4

2 に答える 2

0

データベースに「users」というタイトルのテーブルを作成します。ここでは、複数のテーブルまたは 1 つのテーブルを作成できます。基本的に、テーブル内に役割フィールドと地域フィールドを作成します。ユーザーがサインインすると、役割 (つまり、1 は gm、7 はユーザー)/地域に基づいてアクセスが許可されます。

あなたがやりたいことのために、多くの言語で事前に構築されたソリューションがたくさんあります。探してみることをお勧めします。

于 2012-10-16T18:24:59.333 に答える
0

階層を表すために、parent_role_id他のロールが親の下に「座る」ことができることを意味する列を持つロール テーブルを作成できます。

例えば:

CREATE TABLE `roles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `role` varchar(45) NOT NULL,
  `parent_role_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `parent_role_id` (`parent_role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

私が CMO を追加したい場合、彼らの上に誰もいないため、このフィールドを null のままにします。ただし、エリア マネージャーは5アシスタンス マネージャーの下にあるため、(CMO が 1 であると仮定して) の親 ID を持ちます。これにより、1 つのテーブルのみを使用してフォルダーのような構造を構築できます。

他のユーザーと場所の関係は、さまざまな方法で行うことができます。最も簡単なのは、次のような多数の多対多の関係を介することだと思います。

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `username` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `user_roles`(
  `user_id` int(11) NOT NULL,
  `role_id` int(11) NOT NULL,
  PRIMARY KEY (`user_id`,`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `user_region` (
  `user_id` int(11) NOT NULL,
  `region_id` int(11) NOT NULL,
  PRIMARY KEY (`user_id`,`region_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

これらを承認 (別名パーミッション) の管理に使用する場合は、使用している言語に応じて、よりテスト的で柔軟なソリューションがアクセス制御リスト (ACL) になる可能性があります。

http://en.wikipedia.org/wiki/Access_control_list

于 2012-10-16T18:45:05.803 に答える