2017-12-28 15 views
1

私のアプリケーションは.NET 4.7 Web Apiエンティティフレームワーク6です。マルチテナントの.netプロジェクトでロールを実装する最も良い方法は何ですか?

これは私が構築しているサービスツールとしてのソフトウェアです。私のアプリケーションでは、AspNetUserとCompanyの間に多かれ少なかれ多くの関係があります。

ユーザーは多くの企業を持つことができ、企業は多くのユーザーを持つことができます。ユーザーは、使用したい会社に基づいて、異なるロール/権限セットを持つ必要があります。このようなものを実装する最良の方法は何ですか?

私はAspNetUserRolesテーブルにCompanyId列を追加することを考えていました。そのため、ユーザーは関連する企業ごとに異なる役割を果たすでしょう。これは非常に優れた実装であるとは確信できません。承認の仕組みが壊れる可能性があるので、私は物事の仕組みをより明確に理解するまでそれに触れたくありません。

これまでのところ、マルチテナントアプリケーションのリソースベースの承認にはthis guideが見つかりました。それは私が探しているようだが、それは.NET Coreのためであり、.NET 4.7で動作するかどうかはわかりません。

私は.NET 4.7のようなものを見つけることができませんでしたので、スタックオーバーフローコミュニティに手を差し伸べています。

+0

選択した実装で発生した問題については、質問の範囲を絞り込むことを検討してください。 –

+0

@NoRefundsNoReturns私は選択された実装を持っていません、私はどの実装が進んでいくのが最善だろうと頼んでいます。私は出発点で迷っています。 – Suren

+0

アドバイス:UserとCompanyが多対多であることを本当に必要としているかどうかを再評価してください。それを避けることができれば、各社(テナント)がユーザーを所有し、複数の会社に複数のアカウントを持つユーザーを関連付ける必要がある場合に、マルチテナントの共通パターンになります。企業(テナント)間でユーザーを共有できるようにするには、UserとCompany(CompanyUserエンティティ)間の多対1の関係をサポートするためにIdentity Frameworkのほとんどをオーバーライドして書き直し、CompanyUserとRole(CompanyUserRoleエンティティ)。 – chambo

答えて

0

ゼロから構築する場合は、ASP.NETコアに切り替えてリソースベースの承認を活用することをお勧めします。

テナント間でデータベースを共有することを再検討することをお勧めします。 SaaSアプリケーションのための素晴らしいアイディアではありません。あなたがお金を節約する必要がある場合を除き、コードに複雑さを加えることを望んでいます。 Multi-tenant SaaS database tenancy patternsを読むことができます。

あなたが持っているものにこだわりたいなら、私はAspNetUserとCompanyとの関係を持つ新しいクラスの従業員を紹介することをお勧めします。それはあなたが多くの企業に緊密になることができるシングルユーザーを管理する方法ですが、反対側では社員のコレクションだけを持っています。

役割に応じて、User-Employee-Companyの関係に似た何かをすることができます。ユーザーロールはアプリケーション所有者(あなた)によって管理される必要があるため、コントローラとアクションの認可属性を設定するため、CompanyRoleクラスに定義したロールのみを会社の管理者が選択できるようになります。会社は多くのAspNetUSerRoleを持つ多くのCompanyRoleを持つことができます。

例:あなたがロールを設定

SuperAdmin [アプリとデータ上で絶対的なコントロールを持っている人(おそらくあなたと多分あなたの同僚の一部)、CompanyAdmin [会社の上に絶対的なコントロールを持っている人](おそらくあなたのアプリで会社を作った人)、EmployeeAdmin [社内の従業員を管理するためのアクセスを許可した人](おそらく会社のHR部門の人)、EmployeeReader [社内の読者専用の従業員にアクセスを許可した人会社](おそらく誰でも他の従業員についての情報を読むことができます)などです。あなたのニーズと許可権限がどの程度細かいか、あなたが望むかによって異なります。

次に、CompanyAdminに自分の役割との関係でCompanyRoleエントリのセットを会社に緊密に作成させます。たとえば、CompanyRoleはHumanResourcesAdminであり、あなたのロールEmployeeAdminとの関係を持ちます。

次に、CompanyAdminは新しいEmployeeを作成し、この従業員にそれらのCompanyRolesがあると言う必要があります。従業員をあなたのアカウントとペアにする必要があります(存在しない場合は、登録する必要があります)。これは、従業員が作成された後に送信する電子メールまたはCompanyAdminがボタンを招待するボタンをクリックすると、招待状のリンクで行うことができます。

次に、ユーザー登録/ログイン後に、どの会社にサインインしたいのかを判断し、それに基づいて自分のアイデンティティに簡単に正しい役割を追加することができます。

それは明確ですか?

関連する問題