は、私は、コントローラ上の許可属性を持っていますが、私は1つのアクションでそれをオフにしたいと思います。 自分の認証フィルターを作成し、役割リストに「匿名」を追加しました。私のフィルタでは、匿名がロールリストに表示される場合はtrueを返します。MVCコントローラの1つのアクションで許可を無効にすることはできますか?
しかし、コントローラ許可が何かを横取りされたかのようにログインページを乗り越えるように思えません。
は、私は、コントローラ上の許可属性を持っていますが、私は1つのアクションでそれをオフにしたいと思います。 自分の認証フィルターを作成し、役割リストに「匿名」を追加しました。私のフィルタでは、匿名がロールリストに表示される場合はtrueを返します。MVCコントローラの1つのアクションで許可を無効にすることはできますか?
しかし、コントローラ許可が何かを横取りされたかのようにログインページを乗り越えるように思えません。
あなたは、コントローラクラスに[Authorize]
を追加し、あなたが許可されないようにする単一のアクションに[AllowAnonymous]
を追加することができます。例:
[Authorize]
public class AccountController : Controller
{
public ActionResult Profile()
{
return View();
}
[AllowAnonymous]
public ActionResult Login()
{
return View();
}
}
これはMVC4以上でのみ動作しますが、完全に動作します – Nathan
により、たとえば必要はありません今までに、アクションメソッドにAuthorizationAttributeを追加しないでください。
マイカスタム属性
public class AuthorizationFilterAttribute : AuthorizeAttribute
{
Some code...
}
私のコントローラ
public class UserController : BaseController, IDisposable
{
[AuthorizationFilterAttribute]
public ActionResult UserList()
{
//Authorize attribute will call when this action is executed
}
public ActionResult AddUser()
{
//Authorize attribute will not call when this action is executed
}
}
私はあなたが私はあなたを言うしようとしています何私のポイントを得たいと考えています。
=================更新回答========================== ===================== 以下のような1つの以上の属性を作成します。
public sealed class AnonymousAttribute : Attribute { }
下記のコードをOnAuthorizationメソッドに入力してください。
public override void OnAuthorization(AuthorizationContext filterContext) {
bool checkForAuthorization = filterContext.ActionDescriptor.IsDefined(typeof(AnonymousAttribute), true)
|| filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AnonymousAttribute), true);
if (!skipAuthorization) {
base.OnAuthorization(filterContext);
}
}
独自のバージョンの属性を作成できます。
このような状況を処理する独自の属性を実装する方法は非常によく似ています。
Override Authorize Attribute in ASP.NET MVC
Btw。デフォルトで許可を持つコントローラを作成することもできます。
ベース
[Authorize]
public abstract class SecureControllerBase : Controller
{
}
使用
public class MyController : SecureControllerBase
{
}
単にコントローラクラスにあなたがフィルタリングしたいアクションに属性を追加し、ではありません。アクションを装飾しないことによって、コントローラまたはそのベースコントローラの1つが属性を持たない場合、アクションはフィルタリングされません。
私はルールの例外を欲しいので、コントローラーの電源を入れ、単一のアクションをオフにします。 – jaffa
は、私はちょうどフェデレーションIDプロバイダーとしてAzureのACSを使用してソリューションを行なったし、受け入れられた答えは私のために動作しませんでした。苦労している人にとって、私の解決策は、必要なコントローラー/ビューのセキュリティを完全に回避することでした。
承認をバイパスする必要のあるアクションの新しいコントローラ/ビューを作成します。
とWebで
。configを次のように追加します。<location path="TheNameOfTheControllerYouWantToBypass">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
'(1):'わかりません、いくつかのコードは良いでしょう。 '(2):'アクションメソッドに認可属性を追加することができます。 – gideon
独自のバージョンの属性を作成できます。 http://stackoverflow.com/questions/746998/override-authorize-attribute-in-asp-net-mvc – Tx3
皆さん、みなさんはあなたを理解していないようです:)。私は理解していますが、同じ問題があるので解決策が必要でした。その間に何かを見つけましたか? –