1

私は ASP NET MVC 3 アプリケーションの開発を開始しており、いくつかの優れた DDD プラクティスに従うように努めてきました。以下のような状況があり、ご意見をいただきたいです。システムの機能の 1 つは、システムの 1 人または複数のユーザーが参加する活動 (会議など) の作成です。特定のアクセス プロファイルを持つすべてのユーザーは、新しいアクティビティを作成できます。おそらく、アクティビティを作成したユーザーだけが彼女を変更できます。問題は、この規則を挿入する正しい場所はどこかということです。

->「アクティビティ」エンティティのすべてのセッターで?DRYを破るようです。

-> 変更を保存した時点でリポジトリに? この場合、ユーザー権限を渡す正しいタイミングはいつですか? このメソッドにもう 1 つのパラメーターはありますか? クラス コンストラクターで (私のモデルでは、リポジトリはインターフェイスです。このオプションを採用すると、依存関係は、リポジトリが実装されているインフラストラクチャ レイヤーでのみ明示的になりますか?)

→コントローラー?貧血モデルとのコラボらしい。

ところで、質問はたくさんあります...どう思いますか?

4

1 に答える 1

1

ASP.NET メンバーシップを使用している場合は、ロール プロバイダーとプロファイル プロバイダーを利用し、Authorize 属性を使用して、作成または編集が行われる実際のビューへのアクセスを制限できます。たとえば、作成アクションは次のようになります。

[Authorize(Roles="Activity Admin")]
public ActionResult CreateActivity()
{
    return View();
}

「アクティビティ管理者」は作成者の役割です。次に、編集は次のようになります。

[Authorize(Roles="Activity Admin")]
public ActionResult EditActivity(int id)
{
    Activity activity = ActivityRepository.GetActivityByID(id);

    if (activity.CreatorID != CurrentUser.ID)
    {
        return RedirectToAction("Activities");
    }

    return View(activity);
}

そのifステートメントは、現在ログインしているユーザーが実際にアクティビティを作成したユーザーであることを確認するためにチェックを行います。CurrentUser.UserID は、現在ログインしているユーザーの一意の ID を取得するために使用する任意のメソッドに置き換えることができます。私は通常、ProfileBase クラスを使用して、現在のユーザーの情報を追跡できるクラスを実装します。以下の別のSOの質問へのリンクは、それを行う方法を示しています。

Profilebase クラスはどのように使用できますか?

于 2012-07-03T18:44:51.377 に答える