3

私は現在、データベースの改善に取り組んでおり、成長の余地を作っています。現状では、さまざまなユーザーが Web サイトの領域に対してさまざまな「許可」を持っています。一部のユーザーは、Web サイトの複数の領域へのアクセス許可を持っています。

これを最も効率的な方法で行っている場合は、フィードバックをお願いします。

 tblUsers:
    usrID       usrFirst       usrLast       phone    //etc....
      1            John          Doe 
      2            Jane          Smith
      3            Bill          Jones          


 tblAreas: 
    id      name   
     1       Marketing
     2       Support
     3       Human Resources
     4       Media Relations

 tblPermissions:

    id       usrID       areaID   
    1          1           2
    2          1           4
    3          2           1
    4          3           3

現在、「領域」ごとに個別のディレクトリがあります。ただし、これらのディレクトリをすべて 1 つのメイン ディレクトリに最小化し、ログイン時にユーザーを権限に基づいて適切な「領域」にリダイレクトしたいと考えています。

私はこれを正しくやっているように聞こえますか?私は、さまざまなパーミッションとさまざまな人々のグループを持つ多層サイトを作成したことがないので、これを正しく行う方法についてもっと学ぶことにオープンです。

どうもありがとう!

4

3 に答える 3

3

一般的なデザインは問題ありません。頭に浮かぶ問題はネーミングに関するものです。

  • SQL はハンガリア語表記を必要としません -- 一般的に不要/悪い (tblUsers -> users) と考えられています。
  • テーブル名の前に列名を付けません...
  • ...テーブル名(つまりareaId)を常に含める必要がある列「id」を除く
  • 「最初」と「最後」の列は意味がありません (ヒント: firstName)
  • 名前を tblPermissions -> userAreas に変更します

プログラミング言語とデータベースによっては、テーブル/列名に大文字の代わりにアンダースコアを使用することもお勧めします。

グループごとに別々のディレクトリを使用することについては、私はお勧めしません。ディレクトリ レイアウトではなく、コードにセキュリティ チェックを配置します。

理由:

誰かが、サポートがいくつかのマーケティング活動を行うことも許可されていると判断した場合はどうなりますか? コードを変更するか、データベースにレコードを追加する必要がありますか?

または、重複するアクションがある場合はどうなりますか?

@brianpeiris: いくつかのことが思い浮かびます:

  • JOIN での列エイリアスは不要
  • コードの検索を容易にします ("foo_id" は "id" よりも結果が少なくなります)
  • JOIN ON (foo.id=bar.id) の代わりに JOIN USING (foo_id) を使用します。
于 2009-09-12T17:10:11.173 に答える
1

スキーマは正常に見えます。

アクセス制御をコントローラーに配置し、それを URL パスに基づいて、すべてのセクションにコーディングしないようにすることをお勧めします。

于 2009-09-12T15:42:44.907 に答える