1

それがこの質問をする最善の方法かどうかはわかりません。

Facebookのクローンを作成しました。

今、人々がページ/会社のプロフィールを作成できるようにしたいところまで来ています.

だから私は多くのユーザーができるようにしたい

A)これらのページを管理します(簡単、ページに対してユーザーを承認するだけです)

B) それらのページが通常のユーザー アカウントであるかのように動作します (ページに投稿し、通常のユーザーであるかのようにアプリ全体で動作します)。

これを行うために、私はできました

i) 実際に異なるタイプの新しいユーザーを作成します。通常のユーザーがページ/会社として行動したい場合、実際に認証/承認して、サインインしているアカウントを2番目のユーザーに切り替えます。このユーザーとしてログインすると、同じ方法で別のユーザー タイプに切り替えることができます。コードの変更がほとんどないことを意味し、すべてがうまく機能するはずなので、私は実際にこのアイデアを非常に気に入っています。

問題 - クッキー? 複数のユーザーが同時に同じアカウントにサインインしていますか? これが私の問題であり、一般的なアプリ/クッキーのアプローチをどのように構築するかだと思います

ii) データベースに新しいタイプ、つまりページ/会社を作成し、UserId がある各場所 (投稿、メッセージ、写真、画像など) に PageId と CompanyId を追加するだけです。次に、ページまたは会社として作業しているときに、どのページ/会社がやり取りしたかをログに記録できます。

これにより、オプション a) の理論的にクリーンなアイデアと比較して、かなりの量のコードが変更され、ハックに感じられます。

ただし、絶対に重大なセキュリティ上の欠陥や、オプション A) が悪い考えであるその他の理由を見逃している可能性があります。

アイデアはありますか?

4

1 に答える 1

1

状況を複雑にしすぎているようです。あなたは次のことをしたいようです:

  • Userログイン可能な唯一無二のモデルを作成
  • Userそのモデル内の追加の認証レベルとして「その他のアカウントの種類」を追加します

rolesこれは、モデルに異なるものを追加することに似ていますUser

  • UserA は、UserB よりも多くのことを実行できるロールを持つことができます
  • これらの役割は、必要に応じて行ったり来たりできます

あなたの方法は正しい軌道に乗っているようiです。 KISSが思い浮かびます。

更新 - あなたのコメントに基づいて:

これをどのように行うかについて、設計図に戻ります。見かけの構造があまりにも汚いので、ここでもっと工夫する必要があります。

あなたの正確な構造についてもっと多くの情報を知っていれば、より多くのことを助けることができますが、それは退屈です. そうは言っても、これらの問題を引き起こすソリューションには本質的に複雑なものがあります。

最善を尽くします。ユーザーのニーズを考えると、次のことが頭に浮かびます。

  • 教室の雰囲気に似ています。同じエリア (クラスルーム) にアクセスできる多数のユーザー (学生、教師、管理者) がいて、類似したエリア (異なるクラスルーム) がいくつかあります。
  • 教室の設定のようなものであれば、次のような役割を持つユーザーがいます。
    • 管理者は、どこからでも好きなものにアクセスできます。
    • インストラクターは、明示的に教えているクラスルームにアクセスできます。
      • インストラクターであるということは、教室で生徒よりも多くのことを行うことができるということです。
    • 学生のアクセス許可ははるかに制限されており、基本的に授業への出席、宿題の提出、成績の確認のみが可能です。彼らがコントロールできる唯一のことは、彼らが現れるかどうかの天候です。

最初は、上記の状況は複雑に聞こえるかもしれません。この種の構造の許可スキームをどのようにセットアップするのでしょうか?

簡単:

  • 次の 3 つの役割があります。Admin Teacher Student

  • (単純化[Authorize(Roles = "Admin")]しすぎます) ユーザーがやりたいことは何でもできるので、ユーザーがログインする必要があるすべてのコントローラー アクションを破棄します。

  • Teachers が教えるクラスに関連するすべてのアクションをほぼすべて制御できるようにします。if User.IsInRole("Teacher") && User.Name == classroom.Teacher

  • Studentユーザーが実際に教室にいるかどうかによって、ユーザーができることをさらに制限し、さらに制限することができます: (if User.IsInRole("Student") && User.Name.IsInList().List<Enrollments>EnrollmentListForCurrentClassroom非常に疑似コード)

ロールは 3 つしかありませんが、ロールだけでなく、データベースの個別の部分へのアクセスを制限できます。ユーザーがクラスに登録されている生徒のリスト、教師のリストにも追加されている天候によってアクセスを制限できます。クラスを教える (通常、クラスごとに 1 人の教師のみ. . . ) など。

上記と同様のアプローチをとることで、状況が単純化されることを願っています。

于 2012-07-22T02:08:34.380 に答える