ASP.Net MVC アプリがあり、このアプリ (UI) がビジネス ロジック層 (BLL) を参照し、BLL がデータ アクセス層 (DAL) を参照しているとします。
承認のためにカスタム メンバーシップとロール プロバイダーを利用しています。
メンバーシップ プロバイダーを参照する必要があるレイヤーを特定しようとしています。
MVC では、次の方法で承認チェックを実行できます。
[Authorize(Roles = "SomeRoleName")]
public ActionResult Index()
{
//do something
}
また、私の BLL では、ユーザーがロールに含まれているかどうかを確認することもできます。
public static bool IsRoleEditor(User user, Role userRole)
{
bool retValue = false;
if (user.Application.AppID == UserRole.Application.AppID)
{
if (Roles.IsUserInRole("ModifyRoles"))
{
retValue = true;
}
return retValue;
}
これを行う場合、両方のレイヤーでメンバーシップ クラスを参照してインスタンス化する必要があります。これは、このようなアプリを設計する正しい方法ですか? 多くの冗長性のようです。
BLL があるので、"[Authorize(Roles = "SomeRoleName")]" 属性の使用を避け、代わりに MVC コード内から BLL 関数を呼び出して、ユーザーがロールに属しているかどうかを確認しますか? これを行う場合、MVC は認証のためにメンバーシップ プロバイダーへの参照を必要とし、ログインやその他の ASP コントロールを利用する必要があります。
基地から離れて間違った方向に進んでいませんか?