ログインを有効にするアクション以外のすべてのアクションが、ログに記録されていないユーザーの制限を超える必要があるアプリケーションを作成します。
追加する必要があります[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();
}
}
}
またはこれのショートカットはありますか?特定のコントローラーで唯一のアクションのルールを変更したい場合はどうなりますか?
最も簡単な方法は、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
属性を追加することを忘れないでください。
DavidG
の回答に基づいて、特定の役割(Windows authentication
で、たとえば、全員が承認されている場合)を必要とする場合、これを行うことができます。
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new AuthorizeAttribute { Roles = "MyApp Access" });
}
}