

質問の中におかしい部分があったらすみません。

<https://docs.microsoft.com/ja-
jp/aspnet/core/security/authorization/policies?view=aspnetcore-2.2>  
にもあるように、

[code]

    [Authorize(Policy = "AtLeast21")]
    public class AlcoholPurchaseController : Controller
    {
        public IActionResult Index() => View();
    }
    
[/code]

のようにポリシーを設定することで、アクセス制限をできると認識しています。  
(現在書いているのは、RazorPagesです)

今回、あるポリシーを満たさないユーザーに対して、ページの表示はできるけど、POSTから登録はされたくないというようなことを行いたいです。  
そこで、ポリシー権限をPageModelごとではなく、Post毎に設定したいのですが、できません。

[code]

    [Authorize(Policy = "AtLeast21")]//ここならかける
    public class　EditModel : PageModel
    {
    
        public async Task<IActionResult> OnGetAsync(int? id)
        {
             //処理①
        }
    
        [Authorize(Policy = "AtLeast21")]//ここにかきたい
        public async Task<IActionResult> OnPostAsync()
        {
              //処理②
        }
    }
    
[/code]

ポリシーでは上記のような実装は難しいでしょうか？  
処理②の中で、権限を満たすかどうかのメソッドを書くしかないでしょうか？

ご存知の方がいたら知見を頂けると嬉しいです。


CC BY-SA 4.0
2019-06-07T06:56:28.453
55605
2021-01-05T03:14:06.493
2019-06-07T07:03:38.903
2238
34619
question
asp.net asp.net-core
asp.net core におけるポリシー権限をPageModelごとではなく、Post毎に設定したい


> あるポリシーを満たさないユーザーに対して、ページの表示はできるけど、POSTから登録はされたくないというようなことを行いたいです。

その「ポリシー」というのがどういう条件でどのような判定をし、結果ユーザーにどういう応答を返すのか不明ですのでハズレかもしれませんが・・・

組み込みで用意されているユーザー入力の検証機能を利用して POST 送信されたときに「ポリシー」を満たすか否かを検証し、検証結果が NG
のときはエラーメッセージとともに差し戻すということをしてはいかかでしょう。

以下の記事は Model のプロパティに CustomValidation
属性を付与して、佐藤という苗字の場合は二十歳以上でなければならないということを検証するものです。

CustomValidation 属性  
<http://surferonwww.info/BlogEngine/post/2020/02/25/custom-validation-
attribute.aspx>

同様なことはカスタムモデルバインダや IValidatableObject を継承したカスタムモデルを使っても可能です。詳しくは以下の記事を見てください。

カスタムモデルバインダ (Core 3.1)  
<http://surferonwww.info/BlogEngine/post/2020/02/15/aspnet-core-31-mvc-custom-
model-binder.aspx>

IValidatableObject を継承したカスタムモデル  
<http://surferonwww.info/BlogEngine/post/2020/02/28/custom-model-inheriting-
ivalidatableobject-interface.aspx>


CC BY-SA 4.0
2021-01-05T03:14:06.493
73085
2021-01-05T03:14:06.493
43387
55605
answer