私は一部のユーザーがロールになる可能性があるプロジェクトに取り組んでいますAdminReader
。これらのユーザーはすべてを見ることができますが、データを保存/編集することはできません。アクションを実行する前にユーザーロールを確認する方法はありますか?
私はそれをこの方法で行うことができます知っている:
public JsonResult ChangeStatus(int? id)
{
// AdminReader validation
if (base.User.isAdminReader)
{
return Json(new
{
Message = "You don't have privileges to alter data.",
Success = false,
}, JsonRequestBehavior.AllowGet);
}
// Function code
しかし、私はすべてのプロジェクトの関数の内部で上記のコードを挿入する必要はありません。
[HttpGet]
のように私のメソッドを飾ることができると思っていました。私もこれを読んだSO post。
その後、私はその考えを落としました。
しかし、私は例外ハンドラ属性とロギングアクションフィルタについて発見しました。
何とかpublic void OnActionExecuting(ActionExecutingContext filterContext)
と私のAdminReader検証を組み合わせることはできますか?
私の問題について正しい方法であるかどうかはわかりません。また、本当にうまくいくかどうかはわかりません。この状況では何がベストプラクティスですか?
どのような提案もありがとうございます。
コントローラ全体を1つの役割でしかアクセスできないように制限しますか? @BillRuhl。 – BillRuhl
各行のステータスを変更するためのボタンが付いたテーブルリストを考えてみましょう(これは私の例です)。'AdminReader'はテーブルリスト(コントローラ内の' PartialViewResult')を見ることができますが、 'ChangeStatus'(同じコントローラ内の' JsonResult')はできません。ほとんどのコントローラに適用されます。ステータスを変更するボタンがあるリスト、値を編集するボタンがあるモーダルです。ビューはアクセス可能ですが、メソッドは –
ではありません。@if(User.Identity.IsAuthenticated &&!User.IsInRole( "AdminReader")){// render button} 。つまり、ユーザの役割が "AdiminReader"であれば、ボタンをレンダリングしないでください。 – BillRuhl