web-dev-qa-db-ja.com

ASP .NET MVCアプリケーション全体で承認が必要な方法

ログインを有効にするアクション以外のすべてのアクションが、ログに記録されていないユーザーの制限を超える必要があるアプリケーションを作成します。

追加する必要があります[Authorize]すべてのクラスの見出しの前の注釈?ここのように:

namespace WebApplication2.Controllers {
[Authorize]
    public class HomeController : Controller {




        public ActionResult Index() {
            return View();
        }

        public ActionResult About() {
            ViewBag.Message = "Your application description page.";

            return View();
        }

        public ActionResult Contact() {
            ViewBag.Message = "Your contact page.";

            return View();
        }
    }
}

またはこれのショートカットはありますか?特定のコントローラーで唯一のアクションのルールを変更したい場合はどうなりますか?

25
Yoda

最も簡単な方法は、Authorize属性をフィルター構成に追加して、すべてのコントローラーに適用することです。

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());

        //Add this line
        filters.Add(new AuthorizeAttribute());
    }
}

別の方法は、すべてのコントローラーが基本クラスから継承するようにすることです。ほとんどの場合、すべてのコントローラーが使用できる共有コードがあるため、これは私がよく行うことです。

[Authorize]
public abstract class BaseSecuredController : Controller
{
    //Various methods can go here
}

そして、Controllerから継承する代わりに、すべてのコントローラーがこの新しいクラスを継承する必要があります。

public class MySecureController : BaseSecuredController
{
}

注:ログインしていないユーザーがアクセスできるようにする必要がある場合は、AllowAnonymous属性を追加することを忘れないでください。

41
DavidG

DavidGの回答に基づいて、特定の役割(Windows authenticationで、たとえば、全員が承認されている場合)を必要とする場合、これを行うことができます。

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());

        filters.Add(new AuthorizeAttribute { Roles = "MyApp Access" });
    }
}
11
Serj Sagan