0

許可をどこで行うべきかについて疑問があります。たとえば、HttpGet create と HttpPost create の 2 つのメソッドを持つ PersonController があり、リポジトリ レイヤーと通信するサービス レイヤーを使用しています。さて、最良の方法は何ですか?

1:

[HttpPost]
public ActionResult Create(Person person)
{
    if (ModelState.IsValid)
    {
        new PersonService().Save(person, (int)Session["UserId"]);//I check here permission here

        return RedirectToAction("Home","Home");
    }

    return View();
}

2:

    [HttpPost]
    public ActionResult Create(Person person)
    {
        if (ModelState.IsValid)
        {
            var personService = new PersonService();

            if(personService.UserHasPermission((int)Session["UserId"]){
                 personService.Save(id);
            }

            return RedirectToAction("Home","Home");
        }

        return View();
    }

言い換えれば、ビジネスレイヤー内で行うべきですか、それともコントローラーで行うべきですか?

4

2 に答える 2

0

リソースにアクセスする許可について話しているのか、ドメインで操作を実行する許可について話しているのかによって異なります。

リソースへのアクセスを制御するには、 [Authorize]属性を使用する必要があります。例えば:

URL /admin/indexは、管理者のみが利用できる必要があります。

ドメインを使用して、特定の操作にビジネス ロジックを適用する必要があります。例えば:

ユーザー A は、条件 C が満たされた場合にのみ操作 B を実行できます。

シナリオに応じて、両方のプラクティスを混在させる必要があります。

于 2012-10-03T01:25:14.433 に答える
0

これは「UI」技術に関係なく実装すべき業務内容なので、コントローラーではなく業務レイヤーでアクセス権限を確認することをお勧めします。

これにより、PersonService.Save(id) を呼び出す必要がある Web サービスやその他の UI のようなものを作成する場合に、これを再実装する必要がないため、DRY を維持できます。

于 2012-10-02T21:33:15.987 に答える