[{"data":1,"prerenderedAt":4018},["ShallowReactive",2],{"navigation-ja":3,"navigation-v1":81,"\u002Fja\u002Fguide\u002Fsecurity":146,"\u002Fja\u002Fguide\u002Fsecurity-surround":2195,"\u002Fja\u002Fguide\u002Fsecurity-og":2200},[4,55,77],{"title":5,"path":6,"stem":7,"children":8},"ガイド","\u002Fja\u002Fguide","ja\u002F1.guide\u002F01.index",[9,11,15,19,23,27,31,35,39,43,47,51],{"title":10,"path":6,"stem":7},"イントロダクション",{"title":12,"path":13,"stem":14},"プロローグ","\u002Fja\u002Fguide\u002Fprologue","ja\u002F1.guide\u002F00.prologue",{"title":16,"path":17,"stem":18},"はじめに","\u002Fja\u002Fguide\u002Fgetting-started","ja\u002F1.guide\u002F02.getting-started",{"title":20,"path":21,"stem":22},"モデル","\u002Fja\u002Fguide\u002Fmodels","ja\u002F1.guide\u002F03.models",{"title":24,"path":25,"stem":26},"リレーション","\u002Fja\u002Fguide\u002Frelationships","ja\u002F1.guide\u002F04.relationships",{"title":28,"path":29,"stem":30},"フック","\u002Fja\u002Fguide\u002Fhooks","ja\u002F1.guide\u002F05.hooks",{"title":32,"path":33,"stem":34},"検索","\u002Fja\u002Fguide\u002Fsearch","ja\u002F1.guide\u002F06.search",{"title":36,"path":37,"stem":38},"バッチ操作","\u002Fja\u002Fguide\u002Fbatch-operations","ja\u002F1.guide\u002F07.batch-operations",{"title":40,"path":41,"stem":42},"クエリパラメータ","\u002Fja\u002Fguide\u002Fquery-parameters","ja\u002F1.guide\u002F08.query-parameters",{"title":44,"path":45,"stem":46},"セキュリティ","\u002Fja\u002Fguide\u002Fsecurity","ja\u002F1.guide\u002F09.security",{"title":48,"path":49,"stem":50},"レスポンス","\u002Fja\u002Fguide\u002Fresponses","ja\u002F1.guide\u002F10.responses",{"title":52,"path":53,"stem":54},"仕様書","\u002Fja\u002Fguide\u002Fspecifications","ja\u002F1.guide\u002F11.specifications",{"title":56,"path":57,"stem":58,"children":59},"TypeScript SDK","\u002Fja\u002Ftypescript-sdk","ja\u002F2.typescript-sdk\u002F01.index",[60,61,64,68,71,74],{"title":10,"path":57,"stem":58},{"title":16,"path":62,"stem":63},"\u002Fja\u002Ftypescript-sdk\u002Fgetting-started","ja\u002F2.typescript-sdk\u002F02.getting-started",{"title":65,"path":66,"stem":67},"設定","\u002Fja\u002Ftypescript-sdk\u002Fconfiguration","ja\u002F2.typescript-sdk\u002F03.configuration",{"title":20,"path":69,"stem":70},"\u002Fja\u002Ftypescript-sdk\u002Fmodels","ja\u002F2.typescript-sdk\u002F04.models",{"title":24,"path":72,"stem":73},"\u002Fja\u002Ftypescript-sdk\u002Frelationships","ja\u002F2.typescript-sdk\u002F05.relationships",{"title":40,"path":75,"stem":76},"\u002Fja\u002Ftypescript-sdk\u002Fquery-parameters","ja\u002F2.typescript-sdk\u002F06.query-parameters",{"title":78,"path":79,"stem":80},"スクリーンキャスト","\u002Fja\u002Fscreencasts","ja\u002Fscreencasts",[82,125],{"title":83,"path":84,"stem":85,"children":86},"Guide","\u002Fv1.x\u002Fguide","v1.x\u002F1.guide\u002F01.index",[87,89,93,97,101,105,109,113,117,121],{"title":88,"path":84,"stem":85},"Introduction",{"title":90,"path":91,"stem":92},"Getting Started","\u002Fv1.x\u002Fguide\u002Fgetting-started","v1.x\u002F1.guide\u002F02.getting-started",{"title":94,"path":95,"stem":96},"Models","\u002Fv1.x\u002Fguide\u002Fmodels","v1.x\u002F1.guide\u002F03.models",{"title":98,"path":99,"stem":100},"Relationships","\u002Fv1.x\u002Fguide\u002Frelationships","v1.x\u002F1.guide\u002F04.relationships",{"title":102,"path":103,"stem":104},"Hooks","\u002Fv1.x\u002Fguide\u002Fhooks","v1.x\u002F1.guide\u002F05.hooks",{"title":106,"path":107,"stem":108},"Search","\u002Fv1.x\u002Fguide\u002Fsearch","v1.x\u002F1.guide\u002F06.search",{"title":110,"path":111,"stem":112},"Batch Operations","\u002Fv1.x\u002Fguide\u002Fbatch-operations","v1.x\u002F1.guide\u002F07.batch-operations",{"title":114,"path":115,"stem":116},"Query Parameters","\u002Fv1.x\u002Fguide\u002Fquery-parameters","v1.x\u002F1.guide\u002F08.query-parameters",{"title":118,"path":119,"stem":120},"Security","\u002Fv1.x\u002Fguide\u002Fsecurity","v1.x\u002F1.guide\u002F09.security",{"title":122,"path":123,"stem":124},"Responses","\u002Fv1.x\u002Fguide\u002Fresponses","v1.x\u002F1.guide\u002F10.responses",{"title":56,"path":126,"stem":127,"children":128},"\u002Fv1.x\u002Ftypescript-sdk","v1.x\u002F2.typescript-sdk\u002F01.index",[129,130,133,137,140,143],{"title":88,"path":126,"stem":127},{"title":90,"path":131,"stem":132},"\u002Fv1.x\u002Ftypescript-sdk\u002Fgetting-started","v1.x\u002F2.typescript-sdk\u002F02.getting-started",{"title":134,"path":135,"stem":136},"Configuration","\u002Fv1.x\u002Ftypescript-sdk\u002Fconfiguration","v1.x\u002F2.typescript-sdk\u002F03.configuration",{"title":94,"path":138,"stem":139},"\u002Fv1.x\u002Ftypescript-sdk\u002Fmodels","v1.x\u002F2.typescript-sdk\u002F04.models",{"title":98,"path":141,"stem":142},"\u002Fv1.x\u002Ftypescript-sdk\u002Frelationships","v1.x\u002F2.typescript-sdk\u002F05.relationships",{"title":114,"path":144,"stem":145},"\u002Fv1.x\u002Ftypescript-sdk\u002Fquery-parameters","v1.x\u002F2.typescript-sdk\u002F06.query-parameters",{"id":147,"title":44,"body":148,"description":2189,"extension":2190,"links":2191,"meta":2192,"navigation":225,"path":45,"seo":2193,"stem":46,"__hash__":2194},"docs_ja\u002Fja\u002F1.guide\u002F09.security.md",{"type":149,"value":150,"toc":2176},"minimark",[151,155,173,176,190,198,404,409,416,431,670,673,681,941,944,954,960,1134,1139,1444,1447,1464,1482,1493,1500,1683,1697,1736,1739,1749,1755,1773,1785,1979,2005,2008,2031,2042,2045,2054,2057,2060,2068,2085,2097,2100,2121,2131,2134,2143,2146,2157,2172],[152,153,154],"h2",{"id":154},"認証",[156,157,158,159,166,167,172],"p",{},"Orionは現時点で認証機能を提供しておらず、アプリケーションに必要な認証機能のセットアップは開発者の責任であることを前提としています。この目的には、",[160,161,165],"a",{"href":162,"rel":163},"https:\u002F\u002Fgithub.com\u002Flaravel\u002Fpassport",[164],"nofollow","Laravel Passport","または",[160,168,171],{"href":169,"rel":170},"https:\u002F\u002Fgithub.com\u002Flaravel\u002Fsanctum",[164],"Laravel Sanctum","の利用を推奨します。",[152,174,175],{"id":175},"認可",[156,177,178,180,181,183,184,189],{},[160,179,20],{"href":21},"コントローラーと",[160,182,24],{"href":25},"コントローラーはいずれも、現在認証されているユーザーが特定のアクションを実行できるかどうかの判定に",[160,185,188],{"href":186,"rel":187},"https:\u002F\u002Flaravel.com\u002Fdocs\u002Fauthorization#creating-policies",[164],"モデルポリシー","を利用します。",[156,191,192,193,197],{},"推奨はされませんが、状況によっては特定のコントローラーで認可チェックを無効にしたい場合があります。その場合は",[194,195,196],"code",{},"Orion\\Concerns\\DisableAuthorization","トレイトを使用します。",[199,200,205],"pre",{"className":201,"code":202,"language":203,"meta":204,"style":204},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\nuse Orion\\Concerns\\DisableAuthorization;\n\nclass PostsController extends ApiController\n{\n    use DisableAuthorization;\n\n    \u002F**\n     * @var string $model\n     *\u002F\n    protected $model = Post::class;\n}\n","php","",[194,206,207,220,227,257,262,281,301,306,322,328,339,344,351,367,373,398],{"__ignoreMap":204},[208,209,212,216],"span",{"class":210,"line":211},"line",1,[208,213,215],{"class":214},"sMK4o","\u003C?",[208,217,219],{"class":218},"sTEyZ","php\n",[208,221,223],{"class":210,"line":222},2,[208,224,226],{"emptyLinePlaceholder":225},true,"\n",[208,228,230,234,238,241,244,246,249,251,254],{"class":210,"line":229},3,[208,231,233],{"class":232},"sbssI","namespace",[208,235,237],{"class":236},"sBMFI"," App",[208,239,240],{"class":214},"\\",[208,242,243],{"class":236},"Http",[208,245,240],{"class":214},[208,247,248],{"class":236},"Controllers",[208,250,240],{"class":214},[208,252,253],{"class":236},"Api",[208,255,256],{"class":214},";\n",[208,258,260],{"class":210,"line":259},4,[208,261,226],{"emptyLinePlaceholder":225},[208,263,265,268,270,272,274,276,279],{"class":210,"line":264},5,[208,266,267],{"class":232},"use",[208,269,237],{"class":218},[208,271,240],{"class":214},[208,273,94],{"class":218},[208,275,240],{"class":214},[208,277,278],{"class":218},"Post",[208,280,256],{"class":214},[208,282,284,286,289,291,294,296,299],{"class":210,"line":283},6,[208,285,267],{"class":232},[208,287,288],{"class":218}," Orion",[208,290,240],{"class":214},[208,292,293],{"class":218},"Concerns",[208,295,240],{"class":214},[208,297,298],{"class":218},"DisableAuthorization",[208,300,256],{"class":214},[208,302,304],{"class":210,"line":303},7,[208,305,226],{"emptyLinePlaceholder":225},[208,307,309,313,316,319],{"class":210,"line":308},8,[208,310,312],{"class":311},"spNyl","class",[208,314,315],{"class":236}," PostsController",[208,317,318],{"class":311}," extends",[208,320,321],{"class":236}," ApiController\n",[208,323,325],{"class":210,"line":324},9,[208,326,327],{"class":214},"{\n",[208,329,331,334,337],{"class":210,"line":330},10,[208,332,333],{"class":232},"    use",[208,335,336],{"class":218}," DisableAuthorization",[208,338,256],{"class":214},[208,340,342],{"class":210,"line":341},11,[208,343,226],{"emptyLinePlaceholder":225},[208,345,347],{"class":210,"line":346},12,[208,348,350],{"class":349},"sHwdD","    \u002F**\n",[208,352,354,357,361,364],{"class":210,"line":353},13,[208,355,356],{"class":349},"     * ",[208,358,360],{"class":359},"svl4J","@var",[208,362,363],{"class":359}," string",[208,365,366],{"class":349}," $model\n",[208,368,370],{"class":210,"line":369},14,[208,371,372],{"class":349},"     *\u002F\n",[208,374,376,379,382,385,388,391,394,396],{"class":210,"line":375},15,[208,377,378],{"class":311},"    protected",[208,380,381],{"class":214}," $",[208,383,384],{"class":218},"model ",[208,386,387],{"class":214},"=",[208,389,390],{"class":236}," Post",[208,392,393],{"class":214},"::",[208,395,312],{"class":232},[208,397,256],{"class":214},[208,399,401],{"class":210,"line":400},16,[208,402,403],{"class":214},"}\n",[405,406,408],"h3",{"id":407},"sanctumまたはその他のカスタムauthガードでの利用","Sanctum(またはその他のカスタムAuthガード)での利用",[156,410,411,412,415],{},"デフォルトでは、認可のために現在認証されているユーザーを解決する際に",[194,413,414],{},"api","ガードが使用されます。",[156,417,418,419,422,423,426,427,430],{},"ただし、",[194,420,421],{},"config\u002Forion.php","の",[194,424,425],{},"auth.guard","を設定するか、コントローラーの",[194,428,429],{},"resolveUser","メソッドをオーバーライドすることで、ユーザーの解決方法を変更できます。",[199,432,434],{"className":201,"code":433,"language":203,"meta":204,"style":204},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\n\nclass PostsController extends ApiController\n{\n    \u002F**\n     * @var string $model\n     *\u002F\n    protected $model = Post::class;\n\n     \u002F**\n     * ガードに基づいて現在認証されているユーザーを取得します。\n     *\n     * @return \\Illuminate\\Contracts\\Auth\\Authenticatable|null\n     *\u002F\n    public function resolveUser()\n    {\n        return Auth::guard('sanctum')->user();\n    }\n}\n",[194,435,436,442,446,466,470,486,490,500,504,508,518,522,540,544,549,554,559,597,602,618,624,659,665],{"__ignoreMap":204},[208,437,438,440],{"class":210,"line":211},[208,439,215],{"class":214},[208,441,219],{"class":218},[208,443,444],{"class":210,"line":222},[208,445,226],{"emptyLinePlaceholder":225},[208,447,448,450,452,454,456,458,460,462,464],{"class":210,"line":229},[208,449,233],{"class":232},[208,451,237],{"class":236},[208,453,240],{"class":214},[208,455,243],{"class":236},[208,457,240],{"class":214},[208,459,248],{"class":236},[208,461,240],{"class":214},[208,463,253],{"class":236},[208,465,256],{"class":214},[208,467,468],{"class":210,"line":259},[208,469,226],{"emptyLinePlaceholder":225},[208,471,472,474,476,478,480,482,484],{"class":210,"line":264},[208,473,267],{"class":232},[208,475,237],{"class":218},[208,477,240],{"class":214},[208,479,94],{"class":218},[208,481,240],{"class":214},[208,483,278],{"class":218},[208,485,256],{"class":214},[208,487,488],{"class":210,"line":283},[208,489,226],{"emptyLinePlaceholder":225},[208,491,492,494,496,498],{"class":210,"line":303},[208,493,312],{"class":311},[208,495,315],{"class":236},[208,497,318],{"class":311},[208,499,321],{"class":236},[208,501,502],{"class":210,"line":308},[208,503,327],{"class":214},[208,505,506],{"class":210,"line":324},[208,507,350],{"class":349},[208,509,510,512,514,516],{"class":210,"line":330},[208,511,356],{"class":349},[208,513,360],{"class":359},[208,515,363],{"class":359},[208,517,366],{"class":349},[208,519,520],{"class":210,"line":341},[208,521,372],{"class":349},[208,523,524,526,528,530,532,534,536,538],{"class":210,"line":346},[208,525,378],{"class":311},[208,527,381],{"class":214},[208,529,384],{"class":218},[208,531,387],{"class":214},[208,533,390],{"class":236},[208,535,393],{"class":214},[208,537,312],{"class":232},[208,539,256],{"class":214},[208,541,542],{"class":210,"line":353},[208,543,226],{"emptyLinePlaceholder":225},[208,545,546],{"class":210,"line":369},[208,547,548],{"class":349},"     \u002F**\n",[208,550,551],{"class":210,"line":375},[208,552,553],{"class":349},"     * ガードに基づいて現在認証されているユーザーを取得します。\n",[208,555,556],{"class":210,"line":400},[208,557,558],{"class":349},"     *\n",[208,560,562,564,567,571,575,577,580,582,585,587,591,594],{"class":210,"line":561},17,[208,563,356],{"class":349},[208,565,566],{"class":359},"@return",[208,568,570],{"class":569},"s7zQu"," \\",[208,572,574],{"class":573},"sHdIc","Illuminate",[208,576,240],{"class":569},[208,578,579],{"class":573},"Contracts",[208,581,240],{"class":569},[208,583,584],{"class":573},"Auth",[208,586,240],{"class":569},[208,588,590],{"class":589},"sFweD","Authenticatable",[208,592,593],{"class":569},"|",[208,595,596],{"class":359},"null\n",[208,598,600],{"class":210,"line":599},18,[208,601,372],{"class":349},[208,603,605,608,611,615],{"class":210,"line":604},19,[208,606,607],{"class":311},"    public",[208,609,610],{"class":311}," function",[208,612,614],{"class":613},"s2Zo4"," resolveUser",[208,616,617],{"class":214},"()\n",[208,619,621],{"class":210,"line":620},20,[208,622,623],{"class":214},"    {\n",[208,625,627,630,633,635,638,641,644,648,650,653,656],{"class":210,"line":626},21,[208,628,629],{"class":569},"        return",[208,631,632],{"class":236}," Auth",[208,634,393],{"class":214},[208,636,637],{"class":613},"guard",[208,639,640],{"class":214},"(",[208,642,643],{"class":214},"'",[208,645,647],{"class":646},"sfazB","sanctum",[208,649,643],{"class":214},[208,651,652],{"class":214},")->",[208,654,655],{"class":613},"user",[208,657,658],{"class":214},"();\n",[208,660,662],{"class":210,"line":661},22,[208,663,664],{"class":214},"    }\n",[208,666,668],{"class":210,"line":667},23,[208,669,403],{"class":214},[405,671,672],{"id":672},"親エンティティの認可",[156,674,675,676,680],{},"リレーション操作では、ポリシーに追加の引数として親エンティティが渡されます。この引数を利用して、",[677,678,679],"em",{},"特定の親エンティティのコンテキストにおいて","、ユーザーがリレーションエンティティに対して特定のアクションを実行できるかどうかの追加チェックを設定できます。",[199,682,684],{"className":201,"code":683,"language":203,"meta":204,"style":204},"class PostPolicy\n{\n    public function update($user, $post)\n    {\n        return $post->user_id === $user->id;\n    }\n}\n\nclass PostMetaPolicy\n{\n    public function update($user, $postMeta, $post) \u002F\u002F \u003C---- ここでの $post は親エンティティです\n    {\n        \u002F\u002F チェックはリレーションエンティティ $postMeta ではなく\n        \u002F\u002F 親エンティティ $post に対して実行されることに注意してください\n        return Gate::forUser($user)->inspect('update', $post); \n    }\n    \n    public function create($user, $post)\n    {\n        return Gate::forUser($user)->inspect('update', $post);\n    }\n}\n",[194,685,686,693,697,722,726,754,758,762,766,773,777,808,812,817,822,864,868,873,894,898,933,937],{"__ignoreMap":204},[208,687,688,690],{"class":210,"line":211},[208,689,312],{"class":311},[208,691,692],{"class":236}," PostPolicy\n",[208,694,695],{"class":210,"line":222},[208,696,327],{"class":214},[208,698,699,701,703,706,709,711,714,716,719],{"class":210,"line":229},[208,700,607],{"class":311},[208,702,610],{"class":311},[208,704,705],{"class":613}," update",[208,707,708],{"class":214},"($",[208,710,655],{"class":218},[208,712,713],{"class":214},",",[208,715,381],{"class":214},[208,717,718],{"class":218},"post",[208,720,721],{"class":214},")\n",[208,723,724],{"class":210,"line":259},[208,725,623],{"class":214},[208,727,728,730,732,734,737,740,743,745,747,749,752],{"class":210,"line":264},[208,729,629],{"class":569},[208,731,381],{"class":214},[208,733,718],{"class":218},[208,735,736],{"class":214},"->",[208,738,739],{"class":218},"user_id ",[208,741,742],{"class":214},"===",[208,744,381],{"class":214},[208,746,655],{"class":218},[208,748,736],{"class":214},[208,750,751],{"class":218},"id",[208,753,256],{"class":214},[208,755,756],{"class":210,"line":283},[208,757,664],{"class":214},[208,759,760],{"class":210,"line":303},[208,761,403],{"class":214},[208,763,764],{"class":210,"line":308},[208,765,226],{"emptyLinePlaceholder":225},[208,767,768,770],{"class":210,"line":324},[208,769,312],{"class":311},[208,771,772],{"class":236}," PostMetaPolicy\n",[208,774,775],{"class":210,"line":330},[208,776,327],{"class":214},[208,778,779,781,783,785,787,789,791,793,796,798,800,802,805],{"class":210,"line":341},[208,780,607],{"class":311},[208,782,610],{"class":311},[208,784,705],{"class":613},[208,786,708],{"class":214},[208,788,655],{"class":218},[208,790,713],{"class":214},[208,792,381],{"class":214},[208,794,795],{"class":218},"postMeta",[208,797,713],{"class":214},[208,799,381],{"class":214},[208,801,718],{"class":218},[208,803,804],{"class":214},")",[208,806,807],{"class":349}," \u002F\u002F \u003C---- ここでの $post は親エンティティです\n",[208,809,810],{"class":210,"line":346},[208,811,623],{"class":214},[208,813,814],{"class":210,"line":353},[208,815,816],{"class":349},"        \u002F\u002F チェックはリレーションエンティティ $postMeta ではなく\n",[208,818,819],{"class":210,"line":369},[208,820,821],{"class":349},"        \u002F\u002F 親エンティティ $post に対して実行されることに注意してください\n",[208,823,824,826,829,831,834,836,838,840,843,845,847,850,852,854,856,858,861],{"class":210,"line":375},[208,825,629],{"class":569},[208,827,828],{"class":236}," Gate",[208,830,393],{"class":214},[208,832,833],{"class":613},"forUser",[208,835,708],{"class":214},[208,837,655],{"class":218},[208,839,652],{"class":214},[208,841,842],{"class":613},"inspect",[208,844,640],{"class":214},[208,846,643],{"class":214},[208,848,849],{"class":646},"update",[208,851,643],{"class":214},[208,853,713],{"class":214},[208,855,381],{"class":214},[208,857,718],{"class":218},[208,859,860],{"class":214},");",[208,862,863],{"class":218}," \n",[208,865,866],{"class":210,"line":400},[208,867,664],{"class":214},[208,869,870],{"class":210,"line":561},[208,871,872],{"class":218},"    \n",[208,874,875,877,879,882,884,886,888,890,892],{"class":210,"line":599},[208,876,607],{"class":311},[208,878,610],{"class":311},[208,880,881],{"class":613}," create",[208,883,708],{"class":214},[208,885,655],{"class":218},[208,887,713],{"class":214},[208,889,381],{"class":214},[208,891,718],{"class":218},[208,893,721],{"class":214},[208,895,896],{"class":210,"line":604},[208,897,623],{"class":214},[208,899,900,902,904,906,908,910,912,914,916,918,920,922,924,926,928,930],{"class":210,"line":620},[208,901,629],{"class":569},[208,903,828],{"class":236},[208,905,393],{"class":214},[208,907,833],{"class":613},[208,909,708],{"class":214},[208,911,655],{"class":218},[208,913,652],{"class":214},[208,915,842],{"class":613},[208,917,640],{"class":214},[208,919,643],{"class":214},[208,921,849],{"class":646},[208,923,643],{"class":214},[208,925,713],{"class":214},[208,927,381],{"class":214},[208,929,718],{"class":218},[208,931,932],{"class":214},");\n",[208,934,935],{"class":210,"line":626},[208,936,664],{"class":214},[208,938,939],{"class":210,"line":661},[208,940,403],{"class":214},[405,942,943],{"id":943},"ポリシークラスのカスタマイズ",[156,945,946,947,166,950,953],{},"同じモデルに対して、コントローラーやシナリオごとに異なる認可ルールを使用することはよくあります。デフォルトでは、ポリシーはLaravelの組み込み機能によって解決されます。特定のポリシーをコントローラーで使用したい場合は、",[194,948,949],{},"protected $policy",[194,951,952],{},"protected $parentPolicy","変数を適宜設定します。",[156,955,956],{},[957,958,959],"strong",{},"モデルコントローラー",[199,961,963],{"className":201,"code":962,"language":203,"meta":204,"style":204},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\nuse App\\Policies\\CustomPostPolicy;\n\nclass PostsController extends ApiController\n{\n    \u002F**\n     * @var string $model\n     *\u002F\n    protected $model = Post::class;\n\n    \u002F**\n     * @var string $policy\n     *\u002F\n    protected $policy = CustomPostPolicy::class;\n}\n",[194,964,965,971,975,995,999,1015,1033,1037,1047,1051,1055,1065,1069,1087,1091,1095,1106,1110,1130],{"__ignoreMap":204},[208,966,967,969],{"class":210,"line":211},[208,968,215],{"class":214},[208,970,219],{"class":218},[208,972,973],{"class":210,"line":222},[208,974,226],{"emptyLinePlaceholder":225},[208,976,977,979,981,983,985,987,989,991,993],{"class":210,"line":229},[208,978,233],{"class":232},[208,980,237],{"class":236},[208,982,240],{"class":214},[208,984,243],{"class":236},[208,986,240],{"class":214},[208,988,248],{"class":236},[208,990,240],{"class":214},[208,992,253],{"class":236},[208,994,256],{"class":214},[208,996,997],{"class":210,"line":259},[208,998,226],{"emptyLinePlaceholder":225},[208,1000,1001,1003,1005,1007,1009,1011,1013],{"class":210,"line":264},[208,1002,267],{"class":232},[208,1004,237],{"class":218},[208,1006,240],{"class":214},[208,1008,94],{"class":218},[208,1010,240],{"class":214},[208,1012,278],{"class":218},[208,1014,256],{"class":214},[208,1016,1017,1019,1021,1023,1026,1028,1031],{"class":210,"line":283},[208,1018,267],{"class":232},[208,1020,237],{"class":218},[208,1022,240],{"class":214},[208,1024,1025],{"class":218},"Policies",[208,1027,240],{"class":214},[208,1029,1030],{"class":218},"CustomPostPolicy",[208,1032,256],{"class":214},[208,1034,1035],{"class":210,"line":303},[208,1036,226],{"emptyLinePlaceholder":225},[208,1038,1039,1041,1043,1045],{"class":210,"line":308},[208,1040,312],{"class":311},[208,1042,315],{"class":236},[208,1044,318],{"class":311},[208,1046,321],{"class":236},[208,1048,1049],{"class":210,"line":324},[208,1050,327],{"class":214},[208,1052,1053],{"class":210,"line":330},[208,1054,350],{"class":349},[208,1056,1057,1059,1061,1063],{"class":210,"line":341},[208,1058,356],{"class":349},[208,1060,360],{"class":359},[208,1062,363],{"class":359},[208,1064,366],{"class":349},[208,1066,1067],{"class":210,"line":346},[208,1068,372],{"class":349},[208,1070,1071,1073,1075,1077,1079,1081,1083,1085],{"class":210,"line":353},[208,1072,378],{"class":311},[208,1074,381],{"class":214},[208,1076,384],{"class":218},[208,1078,387],{"class":214},[208,1080,390],{"class":236},[208,1082,393],{"class":214},[208,1084,312],{"class":232},[208,1086,256],{"class":214},[208,1088,1089],{"class":210,"line":369},[208,1090,226],{"emptyLinePlaceholder":225},[208,1092,1093],{"class":210,"line":375},[208,1094,350],{"class":349},[208,1096,1097,1099,1101,1103],{"class":210,"line":400},[208,1098,356],{"class":349},[208,1100,360],{"class":359},[208,1102,363],{"class":359},[208,1104,1105],{"class":349}," $policy\n",[208,1107,1108],{"class":210,"line":561},[208,1109,372],{"class":349},[208,1111,1112,1114,1116,1119,1121,1124,1126,1128],{"class":210,"line":599},[208,1113,378],{"class":311},[208,1115,381],{"class":214},[208,1117,1118],{"class":218},"policy ",[208,1120,387],{"class":214},[208,1122,1123],{"class":236}," CustomPostPolicy",[208,1125,393],{"class":214},[208,1127,312],{"class":232},[208,1129,256],{"class":214},[208,1131,1132],{"class":210,"line":604},[208,1133,403],{"class":214},[156,1135,1136],{},[957,1137,1138],{},"リレーションコントローラー",[199,1140,1142],{"className":201,"code":1141,"language":203,"meta":204,"style":204},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Team;\nuse App\\Policies\\CustomPostPolicy;\nuse App\\Policies\\CustomTeamPolicy;\nuse Orion\\Http\\Controllers\\RelationController;\n\nclass TeamPostsController extends RelationController\n{\n     \u002F**\n     * @var string $model\n     *\u002F\n    protected $model = Team::class; \u002F\u002F または \"App\\Models\\Team\"\n    \n    \u002F**\n     * Post モデルで定義されているリレーション名\n     *\u002F\n    protected $relation = 'posts';\n\n    \u002F**\n     * @var string $parentPolicy\n     *\u002F\n    protected $parentPolicy = CustomTeamPolicy::class;\n\n   \u002F**\n     * @var string $policy\n     *\u002F\n    protected $policy = CustomPostPolicy::class;\n}\n",[194,1143,1144,1150,1154,1174,1178,1195,1211,1228,1249,1253,1265,1269,1273,1283,1287,1310,1314,1318,1323,1327,1348,1352,1356,1367,1372,1393,1398,1404,1415,1420,1439],{"__ignoreMap":204},[208,1145,1146,1148],{"class":210,"line":211},[208,1147,215],{"class":214},[208,1149,219],{"class":218},[208,1151,1152],{"class":210,"line":222},[208,1153,226],{"emptyLinePlaceholder":225},[208,1155,1156,1158,1160,1162,1164,1166,1168,1170,1172],{"class":210,"line":229},[208,1157,233],{"class":232},[208,1159,237],{"class":236},[208,1161,240],{"class":214},[208,1163,243],{"class":236},[208,1165,240],{"class":214},[208,1167,248],{"class":236},[208,1169,240],{"class":214},[208,1171,253],{"class":236},[208,1173,256],{"class":214},[208,1175,1176],{"class":210,"line":259},[208,1177,226],{"emptyLinePlaceholder":225},[208,1179,1180,1182,1184,1186,1188,1190,1193],{"class":210,"line":264},[208,1181,267],{"class":232},[208,1183,237],{"class":218},[208,1185,240],{"class":214},[208,1187,94],{"class":218},[208,1189,240],{"class":214},[208,1191,1192],{"class":218},"Team",[208,1194,256],{"class":214},[208,1196,1197,1199,1201,1203,1205,1207,1209],{"class":210,"line":283},[208,1198,267],{"class":232},[208,1200,237],{"class":218},[208,1202,240],{"class":214},[208,1204,1025],{"class":218},[208,1206,240],{"class":214},[208,1208,1030],{"class":218},[208,1210,256],{"class":214},[208,1212,1213,1215,1217,1219,1221,1223,1226],{"class":210,"line":303},[208,1214,267],{"class":232},[208,1216,237],{"class":218},[208,1218,240],{"class":214},[208,1220,1025],{"class":218},[208,1222,240],{"class":214},[208,1224,1225],{"class":218},"CustomTeamPolicy",[208,1227,256],{"class":214},[208,1229,1230,1232,1234,1236,1238,1240,1242,1244,1247],{"class":210,"line":308},[208,1231,267],{"class":232},[208,1233,288],{"class":218},[208,1235,240],{"class":214},[208,1237,243],{"class":218},[208,1239,240],{"class":214},[208,1241,248],{"class":218},[208,1243,240],{"class":214},[208,1245,1246],{"class":218},"RelationController",[208,1248,256],{"class":214},[208,1250,1251],{"class":210,"line":324},[208,1252,226],{"emptyLinePlaceholder":225},[208,1254,1255,1257,1260,1262],{"class":210,"line":330},[208,1256,312],{"class":311},[208,1258,1259],{"class":236}," TeamPostsController",[208,1261,318],{"class":311},[208,1263,1264],{"class":236}," RelationController\n",[208,1266,1267],{"class":210,"line":341},[208,1268,327],{"class":214},[208,1270,1271],{"class":210,"line":346},[208,1272,548],{"class":349},[208,1274,1275,1277,1279,1281],{"class":210,"line":353},[208,1276,356],{"class":349},[208,1278,360],{"class":359},[208,1280,363],{"class":359},[208,1282,366],{"class":349},[208,1284,1285],{"class":210,"line":369},[208,1286,372],{"class":349},[208,1288,1289,1291,1293,1295,1297,1300,1302,1304,1307],{"class":210,"line":375},[208,1290,378],{"class":311},[208,1292,381],{"class":214},[208,1294,384],{"class":218},[208,1296,387],{"class":214},[208,1298,1299],{"class":236}," Team",[208,1301,393],{"class":214},[208,1303,312],{"class":232},[208,1305,1306],{"class":214},";",[208,1308,1309],{"class":349}," \u002F\u002F または \"App\\Models\\Team\"\n",[208,1311,1312],{"class":210,"line":400},[208,1313,872],{"class":218},[208,1315,1316],{"class":210,"line":561},[208,1317,350],{"class":349},[208,1319,1320],{"class":210,"line":599},[208,1321,1322],{"class":349},"     * Post モデルで定義されているリレーション名\n",[208,1324,1325],{"class":210,"line":604},[208,1326,372],{"class":349},[208,1328,1329,1331,1333,1336,1338,1341,1344,1346],{"class":210,"line":620},[208,1330,378],{"class":311},[208,1332,381],{"class":214},[208,1334,1335],{"class":218},"relation ",[208,1337,387],{"class":214},[208,1339,1340],{"class":214}," '",[208,1342,1343],{"class":646},"posts",[208,1345,643],{"class":214},[208,1347,256],{"class":214},[208,1349,1350],{"class":210,"line":626},[208,1351,226],{"emptyLinePlaceholder":225},[208,1353,1354],{"class":210,"line":661},[208,1355,350],{"class":349},[208,1357,1358,1360,1362,1364],{"class":210,"line":667},[208,1359,356],{"class":349},[208,1361,360],{"class":359},[208,1363,363],{"class":359},[208,1365,1366],{"class":349}," $parentPolicy\n",[208,1368,1370],{"class":210,"line":1369},24,[208,1371,372],{"class":349},[208,1373,1375,1377,1379,1382,1384,1387,1389,1391],{"class":210,"line":1374},25,[208,1376,378],{"class":311},[208,1378,381],{"class":214},[208,1380,1381],{"class":218},"parentPolicy ",[208,1383,387],{"class":214},[208,1385,1386],{"class":236}," CustomTeamPolicy",[208,1388,393],{"class":214},[208,1390,312],{"class":232},[208,1392,256],{"class":214},[208,1394,1396],{"class":210,"line":1395},26,[208,1397,226],{"emptyLinePlaceholder":225},[208,1399,1401],{"class":210,"line":1400},27,[208,1402,1403],{"class":349},"   \u002F**\n",[208,1405,1407,1409,1411,1413],{"class":210,"line":1406},28,[208,1408,356],{"class":349},[208,1410,360],{"class":359},[208,1412,363],{"class":359},[208,1414,1105],{"class":349},[208,1416,1418],{"class":210,"line":1417},29,[208,1419,372],{"class":349},[208,1421,1423,1425,1427,1429,1431,1433,1435,1437],{"class":210,"line":1422},30,[208,1424,378],{"class":311},[208,1426,381],{"class":214},[208,1428,1118],{"class":218},[208,1430,387],{"class":214},[208,1432,1123],{"class":236},[208,1434,393],{"class":214},[208,1436,312],{"class":232},[208,1438,256],{"class":214},[208,1440,1442],{"class":210,"line":1441},31,[208,1443,403],{"class":214},[152,1445,1446],{"id":1446},"バリデーション",[1448,1449,1450],"warning",{},[156,1451,1452,1453,1456,1457,1460,1463],{},"リクエストクラスは、",[194,1454,1455],{},"Illuminate\\Foundation\\Http\\FormRequest","ではなく、",[957,1458,1459],{},"必ず",[194,1461,1462],{},"Orion\\Http\\Requests\\Request","クラスを継承する必要があります。",[156,1465,1466,1469,1470,1472,1473,1478,1479],{},[194,1467,1468],{},"store","および",[194,1471,849],{},"エンドポイントへの受信リクエストデータをバリデーションするために、Orionはリソースモデルに対応する",[160,1474,1477],{"href":1475,"rel":1476},"https:\u002F\u002Flaravel.com\u002Fdocs\u002Fvalidation#form-request-validation",[164],"リクエストクラス","を、次のクラス名パターンに従って探します。\n",[194,1480,1481],{},"App\\Http\\Requests\\\u003Cmodel>Request",[156,1483,1484,1485,1488,1489,1492],{},"たとえば、",[194,1486,1487],{},"App\\Models\\Message","モデルがある場合、対応するリクエストクラスは",[194,1490,1491],{},"App\\Http\\Requests\\MessageRequest","になります。",[156,1494,1495,1496,1499],{},"アプリケーションのリクエストクラス名がこの命名規則に従っていない場合、または単に明示的に指定したい場合は、コントローラーの",[194,1497,1498],{},"protected $request","プロパティに完全修飾リクエストクラス名を設定します。",[199,1501,1503],{"className":201,"code":1502,"language":203,"meta":204,"style":204},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Message;\nuse App\\Http\\Requests\\CustomMessageRequest;\n\nclass MessagesController extends ApiController\n{\n    \u002F**\n     * @var string $model\n     *\u002F\n    protected $model = Message::class;\n\n    \u002F**\n    * @var string $request\n    *\u002F\n    protected $request = CustomMessageRequest::class;\n}\n",[194,1504,1505,1511,1515,1535,1539,1556,1578,1582,1593,1597,1601,1611,1615,1634,1638,1642,1654,1659,1679],{"__ignoreMap":204},[208,1506,1507,1509],{"class":210,"line":211},[208,1508,215],{"class":214},[208,1510,219],{"class":218},[208,1512,1513],{"class":210,"line":222},[208,1514,226],{"emptyLinePlaceholder":225},[208,1516,1517,1519,1521,1523,1525,1527,1529,1531,1533],{"class":210,"line":229},[208,1518,233],{"class":232},[208,1520,237],{"class":236},[208,1522,240],{"class":214},[208,1524,243],{"class":236},[208,1526,240],{"class":214},[208,1528,248],{"class":236},[208,1530,240],{"class":214},[208,1532,253],{"class":236},[208,1534,256],{"class":214},[208,1536,1537],{"class":210,"line":259},[208,1538,226],{"emptyLinePlaceholder":225},[208,1540,1541,1543,1545,1547,1549,1551,1554],{"class":210,"line":264},[208,1542,267],{"class":232},[208,1544,237],{"class":218},[208,1546,240],{"class":214},[208,1548,94],{"class":218},[208,1550,240],{"class":214},[208,1552,1553],{"class":218},"Message",[208,1555,256],{"class":214},[208,1557,1558,1560,1562,1564,1566,1568,1571,1573,1576],{"class":210,"line":283},[208,1559,267],{"class":232},[208,1561,237],{"class":218},[208,1563,240],{"class":214},[208,1565,243],{"class":218},[208,1567,240],{"class":214},[208,1569,1570],{"class":218},"Requests",[208,1572,240],{"class":214},[208,1574,1575],{"class":218},"CustomMessageRequest",[208,1577,256],{"class":214},[208,1579,1580],{"class":210,"line":303},[208,1581,226],{"emptyLinePlaceholder":225},[208,1583,1584,1586,1589,1591],{"class":210,"line":308},[208,1585,312],{"class":311},[208,1587,1588],{"class":236}," MessagesController",[208,1590,318],{"class":311},[208,1592,321],{"class":236},[208,1594,1595],{"class":210,"line":324},[208,1596,327],{"class":214},[208,1598,1599],{"class":210,"line":330},[208,1600,350],{"class":349},[208,1602,1603,1605,1607,1609],{"class":210,"line":341},[208,1604,356],{"class":349},[208,1606,360],{"class":359},[208,1608,363],{"class":359},[208,1610,366],{"class":349},[208,1612,1613],{"class":210,"line":346},[208,1614,372],{"class":349},[208,1616,1617,1619,1621,1623,1625,1628,1630,1632],{"class":210,"line":353},[208,1618,378],{"class":311},[208,1620,381],{"class":214},[208,1622,384],{"class":218},[208,1624,387],{"class":214},[208,1626,1627],{"class":236}," Message",[208,1629,393],{"class":214},[208,1631,312],{"class":232},[208,1633,256],{"class":214},[208,1635,1636],{"class":210,"line":369},[208,1637,226],{"emptyLinePlaceholder":225},[208,1639,1640],{"class":210,"line":375},[208,1641,350],{"class":349},[208,1643,1644,1647,1649,1651],{"class":210,"line":400},[208,1645,1646],{"class":349},"    * ",[208,1648,360],{"class":359},[208,1650,363],{"class":359},[208,1652,1653],{"class":349}," $request\n",[208,1655,1656],{"class":210,"line":561},[208,1657,1658],{"class":349},"    *\u002F\n",[208,1660,1661,1663,1665,1668,1670,1673,1675,1677],{"class":210,"line":599},[208,1662,378],{"class":311},[208,1664,381],{"class":214},[208,1666,1667],{"class":218},"request ",[208,1669,387],{"class":214},[208,1671,1672],{"class":236}," CustomMessageRequest",[208,1674,393],{"class":214},[208,1676,312],{"class":232},[208,1678,256],{"class":214},[208,1680,1681],{"class":210,"line":604},[208,1682,403],{"class":214},[156,1684,1685,1686,1691,1692,1469,1694,1696],{},"リクエストクラスはLaravelの",[160,1687,1690],{"href":1688,"rel":1689},"https:\u002F\u002Flaravel.com\u002Fdocs\u002Fcontainer",[164],"サービスコンテナ","によって結合され、メソッドシグネチャに明示的に指定した場合と同じように、",[194,1693,1468],{},[194,1695,849],{},"メソッドでリクエストデータのバリデーションに使用されます。",[199,1698,1700],{"className":201,"code":1699,"language":203,"meta":204,"style":204},"public function store(CustomMessageRequest $request)\n{\n    ...\n}\n",[194,1701,1702,1723,1727,1732],{"__ignoreMap":204},[208,1703,1704,1707,1709,1712,1714,1716,1718,1721],{"class":210,"line":211},[208,1705,1706],{"class":311},"public",[208,1708,610],{"class":311},[208,1710,1711],{"class":613}," store",[208,1713,640],{"class":214},[208,1715,1575],{"class":236},[208,1717,381],{"class":214},[208,1719,1720],{"class":218},"request",[208,1722,721],{"class":214},[208,1724,1725],{"class":210,"line":222},[208,1726,327],{"class":214},[208,1728,1729],{"class":210,"line":229},[208,1730,1731],{"class":214},"    ...\n",[208,1733,1734],{"class":210,"line":259},[208,1735,403],{"class":214},[405,1737,1738],{"id":1738},"バリデーションルール",[1740,1741,1743,1745,1746,1748],"h4",{"id":1742},"storeとupdate操作のルール定義",[194,1744,1468],{},"と",[194,1747,849],{},"操作のルール定義",[156,1750,1751,1752,1754],{},"Orionが提供する",[194,1753,1462],{},"クラスには、バリデーションルールを指定するためのメソッドがいくつか用意されています。",[156,1756,1757,1745,1759,1761,1762,1765,1766,1469,1769,1772],{},[194,1758,1468],{},[194,1760,849],{},"の両方のエンドポイントに共通のルールを定義するには、",[194,1763,1764],{},"commonRules","メソッドを使用します。\nエンドポイント固有のルールを定義したい場合は、",[194,1767,1768],{},"storeRules",[194,1770,1771],{},"updateRules","メソッドを使用します。",[1448,1774,1775],{},[156,1776,1777,1469,1779,1781,1782,1784],{},[194,1778,1768],{},[194,1780,1771],{},"メソッドで指定した特定のフィールドのルールは、同じキーが両方に含まれる場合、",[194,1783,1764],{},"メソッドのルールを上書きします。",[199,1786,1788],{"className":201,"code":1787,"language":203,"meta":204,"style":204},"\u003C?php\n\nnamespace App\\Http\\Requests;\n\nuse Orion\\Http\\Requests\\Request;\n\nclass PostRequest extends Request\n{\n    public function commonRules() : array\n    {\n        return [\n            'title' => 'required'\n        ];\n    }\n\n    public function storeRules() : array\n    {\n        return [\n            'status' => 'required|in:draft,review'\n        ];\n    }\n}\n",[194,1789,1790,1796,1800,1816,1820,1841,1845,1857,1861,1879,1883,1890,1911,1916,1920,1924,1939,1943,1949,1967,1971,1975],{"__ignoreMap":204},[208,1791,1792,1794],{"class":210,"line":211},[208,1793,215],{"class":214},[208,1795,219],{"class":218},[208,1797,1798],{"class":210,"line":222},[208,1799,226],{"emptyLinePlaceholder":225},[208,1801,1802,1804,1806,1808,1810,1812,1814],{"class":210,"line":229},[208,1803,233],{"class":232},[208,1805,237],{"class":236},[208,1807,240],{"class":214},[208,1809,243],{"class":236},[208,1811,240],{"class":214},[208,1813,1570],{"class":236},[208,1815,256],{"class":214},[208,1817,1818],{"class":210,"line":259},[208,1819,226],{"emptyLinePlaceholder":225},[208,1821,1822,1824,1826,1828,1830,1832,1834,1836,1839],{"class":210,"line":264},[208,1823,267],{"class":232},[208,1825,288],{"class":218},[208,1827,240],{"class":214},[208,1829,243],{"class":218},[208,1831,240],{"class":214},[208,1833,1570],{"class":218},[208,1835,240],{"class":214},[208,1837,1838],{"class":218},"Request",[208,1840,256],{"class":214},[208,1842,1843],{"class":210,"line":283},[208,1844,226],{"emptyLinePlaceholder":225},[208,1846,1847,1849,1852,1854],{"class":210,"line":303},[208,1848,312],{"class":311},[208,1850,1851],{"class":236}," PostRequest",[208,1853,318],{"class":311},[208,1855,1856],{"class":236}," Request\n",[208,1858,1859],{"class":210,"line":308},[208,1860,327],{"class":214},[208,1862,1863,1865,1867,1870,1873,1876],{"class":210,"line":324},[208,1864,607],{"class":311},[208,1866,610],{"class":311},[208,1868,1869],{"class":613}," commonRules",[208,1871,1872],{"class":214},"()",[208,1874,1875],{"class":214}," :",[208,1877,1878],{"class":232}," array\n",[208,1880,1881],{"class":210,"line":330},[208,1882,623],{"class":214},[208,1884,1885,1887],{"class":210,"line":341},[208,1886,629],{"class":569},[208,1888,1889],{"class":214}," [\n",[208,1891,1892,1895,1898,1900,1903,1905,1908],{"class":210,"line":346},[208,1893,1894],{"class":214},"            '",[208,1896,1897],{"class":646},"title",[208,1899,643],{"class":214},[208,1901,1902],{"class":214}," =>",[208,1904,1340],{"class":214},[208,1906,1907],{"class":646},"required",[208,1909,1910],{"class":214},"'\n",[208,1912,1913],{"class":210,"line":353},[208,1914,1915],{"class":214},"        ];\n",[208,1917,1918],{"class":210,"line":369},[208,1919,664],{"class":214},[208,1921,1922],{"class":210,"line":375},[208,1923,226],{"emptyLinePlaceholder":225},[208,1925,1926,1928,1930,1933,1935,1937],{"class":210,"line":400},[208,1927,607],{"class":311},[208,1929,610],{"class":311},[208,1931,1932],{"class":613}," storeRules",[208,1934,1872],{"class":214},[208,1936,1875],{"class":214},[208,1938,1878],{"class":232},[208,1940,1941],{"class":210,"line":561},[208,1942,623],{"class":214},[208,1944,1945,1947],{"class":210,"line":599},[208,1946,629],{"class":569},[208,1948,1889],{"class":214},[208,1950,1951,1953,1956,1958,1960,1962,1965],{"class":210,"line":604},[208,1952,1894],{"class":214},[208,1954,1955],{"class":646},"status",[208,1957,643],{"class":214},[208,1959,1902],{"class":214},[208,1961,1340],{"class":214},[208,1963,1964],{"class":646},"required|in:draft,review",[208,1966,1910],{"class":214},[208,1968,1969],{"class":210,"line":620},[208,1970,1915],{"class":214},[208,1972,1973],{"class":210,"line":626},[208,1974,664],{"class":214},[208,1976,1977],{"class":210,"line":661},[208,1978,403],{"class":214},[156,1980,1981,1982,1984,1985,1745,1987,1989,1990,1992,1993,1995,1996,1998,1999,2001,2002,2004],{},"この例では、",[194,1983,1468],{},"エンドポイントにリクエストが送られた場合、",[194,1986,1897],{},[194,1988,1955],{},"の両方のフィールドが必須になります。一方、",[194,1991,849],{},"エンドポイントにリクエストが送られた場合は、",[194,1994,1771],{},"メソッドに他のルールが定義されておらず、",[194,1997,1764],{},"メソッドで",[194,2000,1897],{},"フィールドが必須と指定されているため、",[194,2003,1897],{},"フィールドのみが必須になります。",[1740,2006,2007],{"id":2007},"リレーション固有の操作のルール定義",[156,2009,2010,2011,2014,2015,2014,2018,2014,2021,2014,2024,2014,2027,2030],{},"リレーション固有のエンドポイントに対してもルールを定義できます: ",[194,2012,2013],{},"associateRules","、",[194,2016,2017],{},"attachRules",[194,2019,2020],{},"detachRules",[194,2022,2023],{},"syncRules",[194,2025,2026],{},"toggleRules",[194,2028,2029],{},"updatePivotRules","。",[1448,2032,2033],{},[156,2034,2035,2036,2038,2039,2030],{},"これらのメソッドで指定したルールは、",[194,2037,1764],{},"メソッドのルールとマージ",[957,2040,2041],{},"されません",[1740,2043,2044],{"id":2044},"バッチ操作のルール定義",[156,2046,2047,2048,2014,2051,2030],{},"バッチエンドポイントに対してもルールを定義できます: ",[194,2049,2050],{},"batchStoreRules",[194,2052,2053],{},"batchUpdateRules",[405,2055,2056],{"id":2056},"バリデーションメッセージ",[156,2058,2059],{},"特定のエンドポイントに対してルールを設定できるのと同様に、バリデーションメッセージもカスタマイズできます。",[1740,2061,2063,1745,2065,2067],{"id":2062},"storeとupdate操作のバリデーションメッセージのカスタマイズ",[194,2064,1468],{},[194,2066,849],{},"操作のバリデーションメッセージのカスタマイズ",[156,2069,2070,1745,2072,2074,2075,2078,2079,1469,2082,1772],{},[194,2071,1468],{},[194,2073,849],{},"の両方のエンドポイントに共通のメッセージを定義するには、",[194,2076,2077],{},"commonMessages","メソッドを使用します。\nエンドポイント固有のメッセージを定義したい場合は、",[194,2080,2081],{},"storeMessages",[194,2083,2084],{},"updateMessages",[1448,2086,2087],{},[156,2088,2089,1469,2091,2093,2094,2096],{},[194,2090,2081],{},[194,2092,2084],{},"メソッドで指定した特定のフィールドのメッセージは、同じキーが両方に含まれる場合、",[194,2095,2077],{},"メソッドのメッセージを上書きします。",[1740,2098,2099],{"id":2099},"リレーション固有の操作のバリデーションメッセージのカスタマイズ",[156,2101,2102,2103,2014,2106,2014,2109,2014,2112,2014,2115,2014,2118,2030],{},"リレーション固有のエンドポイントに対してもメッセージをカスタマイズできます: ",[194,2104,2105],{},"associateMessages",[194,2107,2108],{},"attachMessages",[194,2110,2111],{},"detachMessages",[194,2113,2114],{},"syncMessages",[194,2116,2117],{},"toggleMessages",[194,2119,2120],{},"updatePivotMessages",[1448,2122,2123],{},[156,2124,2125,2126,2128,2129,2030],{},"これらのメソッドで指定したメッセージは、",[194,2127,2077],{},"メソッドのメッセージとマージ",[957,2130,2041],{},[1740,2132,2133],{"id":2133},"バッチ操作のバリデーションメッセージのカスタマイズ",[156,2135,2136,2137,2014,2140,2030],{},"バッチエンドポイントに対してもメッセージをカスタマイズできます: ",[194,2138,2139],{},"batchStoreMessages",[194,2141,2142],{},"batchUpdateMessages",[405,2144,2145],{"id":2145},"リクエストデータの取得",[156,2147,2148,2149,2152,2153,2156],{},"デフォルトでは、エンティティの作成または更新時に、",[677,2150,2151],{},"すべての","リクエストデータが取得され、モデルの",[194,2154,2155],{},"fill","メソッドに渡されます。",[156,2158,2159,2160,2163,2164,2167,2168,2171],{},"ただし、バリデーション済みのデータのみを渡すことも可能です。そのためには、",[194,2161,2162],{},"orion.php","設定ファイルで",[194,2165,2166],{},"use_validated","を",[194,2169,2170],{},"true","に設定します。",[2173,2174,2175],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .svl4J, html code.shiki .svl4J{--shiki-light:#F76D47;--shiki-light-font-style:italic;--shiki-default:#F78C6C;--shiki-default-font-style:italic;--shiki-dark:#F78C6C;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sFweD, html code.shiki .sFweD{--shiki-light:#E2931D;--shiki-light-font-style:italic;--shiki-default:#FFCB6B;--shiki-default-font-style:italic;--shiki-dark:#FFCB6B;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":204,"searchDepth":211,"depth":222,"links":2177},[2178,2179,2184],{"id":154,"depth":222,"text":154},{"id":175,"depth":222,"text":175,"children":2180},[2181,2182,2183],{"id":407,"depth":229,"text":408},{"id":672,"depth":229,"text":672},{"id":943,"depth":229,"text":943},{"id":1446,"depth":222,"text":1446,"children":2185},[2186,2187,2188],{"id":1738,"depth":229,"text":1738},{"id":2056,"depth":229,"text":2056},{"id":2145,"depth":229,"text":2145},"認証、認可、バリデーションについて学びます。","md",null,{},{"title":44,"description":2189},"714Fo36DCQ_m8aZYHLVNfyY8MMIdDv7VUdQygiDlX5Y",[2196,2198],{"title":40,"path":41,"stem":42,"description":2197,"children":-1},"利用可能なクエリパラメータと、その活用方法について学びます。",{"title":48,"path":49,"stem":50,"description":2199,"children":-1},"モデルがJSONレスポンスに変換される仕組みについて学びます。",{"id":2201,"title":118,"body":2202,"description":4012,"extension":2190,"links":2191,"meta":4013,"navigation":225,"path":4014,"seo":4015,"stem":4016,"__hash__":4017},"docs_en\u002F1.guide\u002F09.security.md",{"type":149,"value":2203,"toc":3999},[2204,2208,2219,2223,2241,2247,2387,2391,2397,2409,2611,2615,2622,2860,2864,2872,2877,3045,3050,3333,3337,3351,3366,3374,3380,3552,3565,3599,3603,3612,3618,3634,3647,3823,3849,3853,3869,3880,3884,3891,3895,3898,3906,3920,3932,3936,3951,3961,3965,3972,3976,3986,3997],[152,2205,2207],{"id":2206},"authentication","Authentication",[156,2209,2210,2211,2214,2215,2218],{},"Orion does not provide any authentication perks at the moment, assuming that the developer is responsible for setting up the desired app's authentication capabilities. However, we recommend using ",[160,2212,165],{"href":162,"rel":2213},[164]," or ",[160,2216,171],{"href":169,"rel":2217},[164]," for this purpose.",[152,2220,2222],{"id":2221},"authorization","Authorization",[156,2224,2225,2226,2230,2231,2235,2236,2240],{},"Both ",[160,2227,2229],{"href":2228},"\u002Fguide\u002Fmodels","model"," and ",[160,2232,2234],{"href":2233},"\u002Fguide\u002Frelationships","relation"," controllers rely on ",[160,2237,2239],{"href":186,"rel":2238},[164],"model policies"," to determine whether the currently authenticated user is allowed to perform certain actions or not.",[156,2242,2243,2244,2246],{},"While it is not recommended, in some situations you may want to disable authorization checks on a particular controller. To do so, you can use ",[194,2245,196],{}," trait.",[199,2248,2249],{"className":201,"code":202,"language":203,"meta":204,"style":204},[194,2250,2251,2257,2261,2281,2285,2301,2317,2321,2331,2335,2343,2347,2351,2361,2365,2383],{"__ignoreMap":204},[208,2252,2253,2255],{"class":210,"line":211},[208,2254,215],{"class":214},[208,2256,219],{"class":218},[208,2258,2259],{"class":210,"line":222},[208,2260,226],{"emptyLinePlaceholder":225},[208,2262,2263,2265,2267,2269,2271,2273,2275,2277,2279],{"class":210,"line":229},[208,2264,233],{"class":232},[208,2266,237],{"class":236},[208,2268,240],{"class":214},[208,2270,243],{"class":236},[208,2272,240],{"class":214},[208,2274,248],{"class":236},[208,2276,240],{"class":214},[208,2278,253],{"class":236},[208,2280,256],{"class":214},[208,2282,2283],{"class":210,"line":259},[208,2284,226],{"emptyLinePlaceholder":225},[208,2286,2287,2289,2291,2293,2295,2297,2299],{"class":210,"line":264},[208,2288,267],{"class":232},[208,2290,237],{"class":218},[208,2292,240],{"class":214},[208,2294,94],{"class":218},[208,2296,240],{"class":214},[208,2298,278],{"class":218},[208,2300,256],{"class":214},[208,2302,2303,2305,2307,2309,2311,2313,2315],{"class":210,"line":283},[208,2304,267],{"class":232},[208,2306,288],{"class":218},[208,2308,240],{"class":214},[208,2310,293],{"class":218},[208,2312,240],{"class":214},[208,2314,298],{"class":218},[208,2316,256],{"class":214},[208,2318,2319],{"class":210,"line":303},[208,2320,226],{"emptyLinePlaceholder":225},[208,2322,2323,2325,2327,2329],{"class":210,"line":308},[208,2324,312],{"class":311},[208,2326,315],{"class":236},[208,2328,318],{"class":311},[208,2330,321],{"class":236},[208,2332,2333],{"class":210,"line":324},[208,2334,327],{"class":214},[208,2336,2337,2339,2341],{"class":210,"line":330},[208,2338,333],{"class":232},[208,2340,336],{"class":218},[208,2342,256],{"class":214},[208,2344,2345],{"class":210,"line":341},[208,2346,226],{"emptyLinePlaceholder":225},[208,2348,2349],{"class":210,"line":346},[208,2350,350],{"class":349},[208,2352,2353,2355,2357,2359],{"class":210,"line":353},[208,2354,356],{"class":349},[208,2356,360],{"class":359},[208,2358,363],{"class":359},[208,2360,366],{"class":349},[208,2362,2363],{"class":210,"line":369},[208,2364,372],{"class":349},[208,2366,2367,2369,2371,2373,2375,2377,2379,2381],{"class":210,"line":375},[208,2368,378],{"class":311},[208,2370,381],{"class":214},[208,2372,384],{"class":218},[208,2374,387],{"class":214},[208,2376,390],{"class":236},[208,2378,393],{"class":214},[208,2380,312],{"class":232},[208,2382,256],{"class":214},[208,2384,2385],{"class":210,"line":400},[208,2386,403],{"class":214},[405,2388,2390],{"id":2389},"usage-with-sanctum-or-any-other-custom-auth-guard","Usage with Sanctum (or any other custom Auth guard)",[156,2392,2393,2394,2396],{},"By default, the ",[194,2395,414],{}," guard is used to resolve the currently authenticated user for authorization.",[156,2398,2399,2400,2402,2403,2405,2406,2408],{},"However, you can change the way users are resolved either by setting ",[194,2401,425],{}," in ",[194,2404,421],{}," or by overriding ",[194,2407,429],{}," method on a controller.",[199,2410,2412],{"className":201,"code":2411,"language":203,"meta":204,"style":204},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Post;\n\nclass PostsController extends ApiController\n{\n    \u002F**\n     * @var string $model\n     *\u002F\n    protected $model = Post::class;\n\n     \u002F**\n     * Retrieves currently authenticated user based on the guard.\n     *\n     * @return \\Illuminate\\Contracts\\Auth\\Authenticatable|null\n     *\u002F\n    public function resolveUser()\n    {\n        return Auth::guard('sanctum')->user();\n    }\n}\n",[194,2413,2414,2420,2424,2444,2448,2464,2468,2478,2482,2486,2496,2500,2518,2522,2526,2531,2535,2561,2565,2575,2579,2603,2607],{"__ignoreMap":204},[208,2415,2416,2418],{"class":210,"line":211},[208,2417,215],{"class":214},[208,2419,219],{"class":218},[208,2421,2422],{"class":210,"line":222},[208,2423,226],{"emptyLinePlaceholder":225},[208,2425,2426,2428,2430,2432,2434,2436,2438,2440,2442],{"class":210,"line":229},[208,2427,233],{"class":232},[208,2429,237],{"class":236},[208,2431,240],{"class":214},[208,2433,243],{"class":236},[208,2435,240],{"class":214},[208,2437,248],{"class":236},[208,2439,240],{"class":214},[208,2441,253],{"class":236},[208,2443,256],{"class":214},[208,2445,2446],{"class":210,"line":259},[208,2447,226],{"emptyLinePlaceholder":225},[208,2449,2450,2452,2454,2456,2458,2460,2462],{"class":210,"line":264},[208,2451,267],{"class":232},[208,2453,237],{"class":218},[208,2455,240],{"class":214},[208,2457,94],{"class":218},[208,2459,240],{"class":214},[208,2461,278],{"class":218},[208,2463,256],{"class":214},[208,2465,2466],{"class":210,"line":283},[208,2467,226],{"emptyLinePlaceholder":225},[208,2469,2470,2472,2474,2476],{"class":210,"line":303},[208,2471,312],{"class":311},[208,2473,315],{"class":236},[208,2475,318],{"class":311},[208,2477,321],{"class":236},[208,2479,2480],{"class":210,"line":308},[208,2481,327],{"class":214},[208,2483,2484],{"class":210,"line":324},[208,2485,350],{"class":349},[208,2487,2488,2490,2492,2494],{"class":210,"line":330},[208,2489,356],{"class":349},[208,2491,360],{"class":359},[208,2493,363],{"class":359},[208,2495,366],{"class":349},[208,2497,2498],{"class":210,"line":341},[208,2499,372],{"class":349},[208,2501,2502,2504,2506,2508,2510,2512,2514,2516],{"class":210,"line":346},[208,2503,378],{"class":311},[208,2505,381],{"class":214},[208,2507,384],{"class":218},[208,2509,387],{"class":214},[208,2511,390],{"class":236},[208,2513,393],{"class":214},[208,2515,312],{"class":232},[208,2517,256],{"class":214},[208,2519,2520],{"class":210,"line":353},[208,2521,226],{"emptyLinePlaceholder":225},[208,2523,2524],{"class":210,"line":369},[208,2525,548],{"class":349},[208,2527,2528],{"class":210,"line":375},[208,2529,2530],{"class":349},"     * Retrieves currently authenticated user based on the guard.\n",[208,2532,2533],{"class":210,"line":400},[208,2534,558],{"class":349},[208,2536,2537,2539,2541,2543,2545,2547,2549,2551,2553,2555,2557,2559],{"class":210,"line":561},[208,2538,356],{"class":349},[208,2540,566],{"class":359},[208,2542,570],{"class":569},[208,2544,574],{"class":573},[208,2546,240],{"class":569},[208,2548,579],{"class":573},[208,2550,240],{"class":569},[208,2552,584],{"class":573},[208,2554,240],{"class":569},[208,2556,590],{"class":589},[208,2558,593],{"class":569},[208,2560,596],{"class":359},[208,2562,2563],{"class":210,"line":599},[208,2564,372],{"class":349},[208,2566,2567,2569,2571,2573],{"class":210,"line":604},[208,2568,607],{"class":311},[208,2570,610],{"class":311},[208,2572,614],{"class":613},[208,2574,617],{"class":214},[208,2576,2577],{"class":210,"line":620},[208,2578,623],{"class":214},[208,2580,2581,2583,2585,2587,2589,2591,2593,2595,2597,2599,2601],{"class":210,"line":626},[208,2582,629],{"class":569},[208,2584,632],{"class":236},[208,2586,393],{"class":214},[208,2588,637],{"class":613},[208,2590,640],{"class":214},[208,2592,643],{"class":214},[208,2594,647],{"class":646},[208,2596,643],{"class":214},[208,2598,652],{"class":214},[208,2600,655],{"class":613},[208,2602,658],{"class":214},[208,2604,2605],{"class":210,"line":661},[208,2606,664],{"class":214},[208,2608,2609],{"class":210,"line":667},[208,2610,403],{"class":214},[405,2612,2614],{"id":2613},"authorizing-parent-entities","Authorizing Parent Entities",[156,2616,2617,2618,2621],{},"Relation operations pass an additional argument to policies - the parent entity. You can use that argument to set up additional checks on whether a user is authorized to perform certain actions on a relation entity ",[677,2619,2620],{},"in the context of a given parent entity",".",[199,2623,2625],{"className":201,"code":2624,"language":203,"meta":204,"style":204},"class PostPolicy\n{\n    public function update($user, $post)\n    {\n        return $post->user_id === $user->id;\n    }\n}\n\nclass PostMetaPolicy\n{\n    public function update($user, $postMeta, $post) \u002F\u002F \u003C---- $post here is the parent entity\n    {\n        \u002F\u002F please note that the check is performed against\n        \u002F\u002F the parent entity $post, not the relation entity $postMeta\n        return Gate::forUser($user)->inspect('update', $post); \n    }\n    \n    public function create($user, $post)\n    {\n        return Gate::forUser($user)->inspect('update', $post);\n    }\n}\n",[194,2626,2627,2633,2637,2657,2661,2685,2689,2693,2697,2703,2707,2736,2740,2745,2750,2786,2790,2794,2814,2818,2852,2856],{"__ignoreMap":204},[208,2628,2629,2631],{"class":210,"line":211},[208,2630,312],{"class":311},[208,2632,692],{"class":236},[208,2634,2635],{"class":210,"line":222},[208,2636,327],{"class":214},[208,2638,2639,2641,2643,2645,2647,2649,2651,2653,2655],{"class":210,"line":229},[208,2640,607],{"class":311},[208,2642,610],{"class":311},[208,2644,705],{"class":613},[208,2646,708],{"class":214},[208,2648,655],{"class":218},[208,2650,713],{"class":214},[208,2652,381],{"class":214},[208,2654,718],{"class":218},[208,2656,721],{"class":214},[208,2658,2659],{"class":210,"line":259},[208,2660,623],{"class":214},[208,2662,2663,2665,2667,2669,2671,2673,2675,2677,2679,2681,2683],{"class":210,"line":264},[208,2664,629],{"class":569},[208,2666,381],{"class":214},[208,2668,718],{"class":218},[208,2670,736],{"class":214},[208,2672,739],{"class":218},[208,2674,742],{"class":214},[208,2676,381],{"class":214},[208,2678,655],{"class":218},[208,2680,736],{"class":214},[208,2682,751],{"class":218},[208,2684,256],{"class":214},[208,2686,2687],{"class":210,"line":283},[208,2688,664],{"class":214},[208,2690,2691],{"class":210,"line":303},[208,2692,403],{"class":214},[208,2694,2695],{"class":210,"line":308},[208,2696,226],{"emptyLinePlaceholder":225},[208,2698,2699,2701],{"class":210,"line":324},[208,2700,312],{"class":311},[208,2702,772],{"class":236},[208,2704,2705],{"class":210,"line":330},[208,2706,327],{"class":214},[208,2708,2709,2711,2713,2715,2717,2719,2721,2723,2725,2727,2729,2731,2733],{"class":210,"line":341},[208,2710,607],{"class":311},[208,2712,610],{"class":311},[208,2714,705],{"class":613},[208,2716,708],{"class":214},[208,2718,655],{"class":218},[208,2720,713],{"class":214},[208,2722,381],{"class":214},[208,2724,795],{"class":218},[208,2726,713],{"class":214},[208,2728,381],{"class":214},[208,2730,718],{"class":218},[208,2732,804],{"class":214},[208,2734,2735],{"class":349}," \u002F\u002F \u003C---- $post here is the parent entity\n",[208,2737,2738],{"class":210,"line":346},[208,2739,623],{"class":214},[208,2741,2742],{"class":210,"line":353},[208,2743,2744],{"class":349},"        \u002F\u002F please note that the check is performed against\n",[208,2746,2747],{"class":210,"line":369},[208,2748,2749],{"class":349},"        \u002F\u002F the parent entity $post, not the relation entity $postMeta\n",[208,2751,2752,2754,2756,2758,2760,2762,2764,2766,2768,2770,2772,2774,2776,2778,2780,2782,2784],{"class":210,"line":375},[208,2753,629],{"class":569},[208,2755,828],{"class":236},[208,2757,393],{"class":214},[208,2759,833],{"class":613},[208,2761,708],{"class":214},[208,2763,655],{"class":218},[208,2765,652],{"class":214},[208,2767,842],{"class":613},[208,2769,640],{"class":214},[208,2771,643],{"class":214},[208,2773,849],{"class":646},[208,2775,643],{"class":214},[208,2777,713],{"class":214},[208,2779,381],{"class":214},[208,2781,718],{"class":218},[208,2783,860],{"class":214},[208,2785,863],{"class":218},[208,2787,2788],{"class":210,"line":400},[208,2789,664],{"class":214},[208,2791,2792],{"class":210,"line":561},[208,2793,872],{"class":218},[208,2795,2796,2798,2800,2802,2804,2806,2808,2810,2812],{"class":210,"line":599},[208,2797,607],{"class":311},[208,2799,610],{"class":311},[208,2801,881],{"class":613},[208,2803,708],{"class":214},[208,2805,655],{"class":218},[208,2807,713],{"class":214},[208,2809,381],{"class":214},[208,2811,718],{"class":218},[208,2813,721],{"class":214},[208,2815,2816],{"class":210,"line":604},[208,2817,623],{"class":214},[208,2819,2820,2822,2824,2826,2828,2830,2832,2834,2836,2838,2840,2842,2844,2846,2848,2850],{"class":210,"line":620},[208,2821,629],{"class":569},[208,2823,828],{"class":236},[208,2825,393],{"class":214},[208,2827,833],{"class":613},[208,2829,708],{"class":214},[208,2831,655],{"class":218},[208,2833,652],{"class":214},[208,2835,842],{"class":613},[208,2837,640],{"class":214},[208,2839,643],{"class":214},[208,2841,849],{"class":646},[208,2843,643],{"class":214},[208,2845,713],{"class":214},[208,2847,381],{"class":214},[208,2849,718],{"class":218},[208,2851,932],{"class":214},[208,2853,2854],{"class":210,"line":626},[208,2855,664],{"class":214},[208,2857,2858],{"class":210,"line":661},[208,2859,403],{"class":214},[405,2861,2863],{"id":2862},"customizing-policy-classes","Customizing Policy Classes",[156,2865,2866,2867,2214,2869,2871],{},"It is quite common to see different authorization rules for the same models used in different controllers or scenarios. By default, the policy is resolved by Laravel using its built-in functionality. However, if you would like to use a specific policy for a controller, set the ",[194,2868,949],{},[194,2870,952],{}," variables accordingly:",[156,2873,2874],{},[957,2875,2876],{},"Model controller",[199,2878,2879],{"className":201,"code":962,"language":203,"meta":204,"style":204},[194,2880,2881,2887,2891,2911,2915,2931,2947,2951,2961,2965,2969,2979,2983,3001,3005,3009,3019,3023,3041],{"__ignoreMap":204},[208,2882,2883,2885],{"class":210,"line":211},[208,2884,215],{"class":214},[208,2886,219],{"class":218},[208,2888,2889],{"class":210,"line":222},[208,2890,226],{"emptyLinePlaceholder":225},[208,2892,2893,2895,2897,2899,2901,2903,2905,2907,2909],{"class":210,"line":229},[208,2894,233],{"class":232},[208,2896,237],{"class":236},[208,2898,240],{"class":214},[208,2900,243],{"class":236},[208,2902,240],{"class":214},[208,2904,248],{"class":236},[208,2906,240],{"class":214},[208,2908,253],{"class":236},[208,2910,256],{"class":214},[208,2912,2913],{"class":210,"line":259},[208,2914,226],{"emptyLinePlaceholder":225},[208,2916,2917,2919,2921,2923,2925,2927,2929],{"class":210,"line":264},[208,2918,267],{"class":232},[208,2920,237],{"class":218},[208,2922,240],{"class":214},[208,2924,94],{"class":218},[208,2926,240],{"class":214},[208,2928,278],{"class":218},[208,2930,256],{"class":214},[208,2932,2933,2935,2937,2939,2941,2943,2945],{"class":210,"line":283},[208,2934,267],{"class":232},[208,2936,237],{"class":218},[208,2938,240],{"class":214},[208,2940,1025],{"class":218},[208,2942,240],{"class":214},[208,2944,1030],{"class":218},[208,2946,256],{"class":214},[208,2948,2949],{"class":210,"line":303},[208,2950,226],{"emptyLinePlaceholder":225},[208,2952,2953,2955,2957,2959],{"class":210,"line":308},[208,2954,312],{"class":311},[208,2956,315],{"class":236},[208,2958,318],{"class":311},[208,2960,321],{"class":236},[208,2962,2963],{"class":210,"line":324},[208,2964,327],{"class":214},[208,2966,2967],{"class":210,"line":330},[208,2968,350],{"class":349},[208,2970,2971,2973,2975,2977],{"class":210,"line":341},[208,2972,356],{"class":349},[208,2974,360],{"class":359},[208,2976,363],{"class":359},[208,2978,366],{"class":349},[208,2980,2981],{"class":210,"line":346},[208,2982,372],{"class":349},[208,2984,2985,2987,2989,2991,2993,2995,2997,2999],{"class":210,"line":353},[208,2986,378],{"class":311},[208,2988,381],{"class":214},[208,2990,384],{"class":218},[208,2992,387],{"class":214},[208,2994,390],{"class":236},[208,2996,393],{"class":214},[208,2998,312],{"class":232},[208,3000,256],{"class":214},[208,3002,3003],{"class":210,"line":369},[208,3004,226],{"emptyLinePlaceholder":225},[208,3006,3007],{"class":210,"line":375},[208,3008,350],{"class":349},[208,3010,3011,3013,3015,3017],{"class":210,"line":400},[208,3012,356],{"class":349},[208,3014,360],{"class":359},[208,3016,363],{"class":359},[208,3018,1105],{"class":349},[208,3020,3021],{"class":210,"line":561},[208,3022,372],{"class":349},[208,3024,3025,3027,3029,3031,3033,3035,3037,3039],{"class":210,"line":599},[208,3026,378],{"class":311},[208,3028,381],{"class":214},[208,3030,1118],{"class":218},[208,3032,387],{"class":214},[208,3034,1123],{"class":236},[208,3036,393],{"class":214},[208,3038,312],{"class":232},[208,3040,256],{"class":214},[208,3042,3043],{"class":210,"line":604},[208,3044,403],{"class":214},[156,3046,3047],{},[957,3048,3049],{},"Relation controller",[199,3051,3053],{"className":201,"code":3052,"language":203,"meta":204,"style":204},"\u003C?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Models\\Team;\nuse App\\Policies\\CustomPostPolicy;\nuse App\\Policies\\CustomTeamPolicy;\nuse Orion\\Http\\Controllers\\RelationController;\n\nclass TeamPostsController extends RelationController\n{\n     \u002F**\n     * @var string $model\n     *\u002F\n    protected $model = Team::class; \u002F\u002F or \"App\\Models\\Team\"\n    \n    \u002F**\n     * Name of the relationship as it is defined on the Post model\n     *\u002F\n    protected $relation = 'posts';\n\n    \u002F**\n     * @var string $parentPolicy\n     *\u002F\n    protected $parentPolicy = CustomTeamPolicy::class;\n\n   \u002F**\n     * @var string $policy\n     *\u002F\n    protected $policy = CustomPostPolicy::class;\n}\n",[194,3054,3055,3061,3065,3085,3089,3105,3121,3137,3157,3161,3171,3175,3179,3189,3193,3214,3218,3222,3227,3231,3249,3253,3257,3267,3271,3289,3293,3297,3307,3311,3329],{"__ignoreMap":204},[208,3056,3057,3059],{"class":210,"line":211},[208,3058,215],{"class":214},[208,3060,219],{"class":218},[208,3062,3063],{"class":210,"line":222},[208,3064,226],{"emptyLinePlaceholder":225},[208,3066,3067,3069,3071,3073,3075,3077,3079,3081,3083],{"class":210,"line":229},[208,3068,233],{"class":232},[208,3070,237],{"class":236},[208,3072,240],{"class":214},[208,3074,243],{"class":236},[208,3076,240],{"class":214},[208,3078,248],{"class":236},[208,3080,240],{"class":214},[208,3082,253],{"class":236},[208,3084,256],{"class":214},[208,3086,3087],{"class":210,"line":259},[208,3088,226],{"emptyLinePlaceholder":225},[208,3090,3091,3093,3095,3097,3099,3101,3103],{"class":210,"line":264},[208,3092,267],{"class":232},[208,3094,237],{"class":218},[208,3096,240],{"class":214},[208,3098,94],{"class":218},[208,3100,240],{"class":214},[208,3102,1192],{"class":218},[208,3104,256],{"class":214},[208,3106,3107,3109,3111,3113,3115,3117,3119],{"class":210,"line":283},[208,3108,267],{"class":232},[208,3110,237],{"class":218},[208,3112,240],{"class":214},[208,3114,1025],{"class":218},[208,3116,240],{"class":214},[208,3118,1030],{"class":218},[208,3120,256],{"class":214},[208,3122,3123,3125,3127,3129,3131,3133,3135],{"class":210,"line":303},[208,3124,267],{"class":232},[208,3126,237],{"class":218},[208,3128,240],{"class":214},[208,3130,1025],{"class":218},[208,3132,240],{"class":214},[208,3134,1225],{"class":218},[208,3136,256],{"class":214},[208,3138,3139,3141,3143,3145,3147,3149,3151,3153,3155],{"class":210,"line":308},[208,3140,267],{"class":232},[208,3142,288],{"class":218},[208,3144,240],{"class":214},[208,3146,243],{"class":218},[208,3148,240],{"class":214},[208,3150,248],{"class":218},[208,3152,240],{"class":214},[208,3154,1246],{"class":218},[208,3156,256],{"class":214},[208,3158,3159],{"class":210,"line":324},[208,3160,226],{"emptyLinePlaceholder":225},[208,3162,3163,3165,3167,3169],{"class":210,"line":330},[208,3164,312],{"class":311},[208,3166,1259],{"class":236},[208,3168,318],{"class":311},[208,3170,1264],{"class":236},[208,3172,3173],{"class":210,"line":341},[208,3174,327],{"class":214},[208,3176,3177],{"class":210,"line":346},[208,3178,548],{"class":349},[208,3180,3181,3183,3185,3187],{"class":210,"line":353},[208,3182,356],{"class":349},[208,3184,360],{"class":359},[208,3186,363],{"class":359},[208,3188,366],{"class":349},[208,3190,3191],{"class":210,"line":369},[208,3192,372],{"class":349},[208,3194,3195,3197,3199,3201,3203,3205,3207,3209,3211],{"class":210,"line":375},[208,3196,378],{"class":311},[208,3198,381],{"class":214},[208,3200,384],{"class":218},[208,3202,387],{"class":214},[208,3204,1299],{"class":236},[208,3206,393],{"class":214},[208,3208,312],{"class":232},[208,3210,1306],{"class":214},[208,3212,3213],{"class":349}," \u002F\u002F or \"App\\Models\\Team\"\n",[208,3215,3216],{"class":210,"line":400},[208,3217,872],{"class":218},[208,3219,3220],{"class":210,"line":561},[208,3221,350],{"class":349},[208,3223,3224],{"class":210,"line":599},[208,3225,3226],{"class":349},"     * Name of the relationship as it is defined on the Post model\n",[208,3228,3229],{"class":210,"line":604},[208,3230,372],{"class":349},[208,3232,3233,3235,3237,3239,3241,3243,3245,3247],{"class":210,"line":620},[208,3234,378],{"class":311},[208,3236,381],{"class":214},[208,3238,1335],{"class":218},[208,3240,387],{"class":214},[208,3242,1340],{"class":214},[208,3244,1343],{"class":646},[208,3246,643],{"class":214},[208,3248,256],{"class":214},[208,3250,3251],{"class":210,"line":626},[208,3252,226],{"emptyLinePlaceholder":225},[208,3254,3255],{"class":210,"line":661},[208,3256,350],{"class":349},[208,3258,3259,3261,3263,3265],{"class":210,"line":667},[208,3260,356],{"class":349},[208,3262,360],{"class":359},[208,3264,363],{"class":359},[208,3266,1366],{"class":349},[208,3268,3269],{"class":210,"line":1369},[208,3270,372],{"class":349},[208,3272,3273,3275,3277,3279,3281,3283,3285,3287],{"class":210,"line":1374},[208,3274,378],{"class":311},[208,3276,381],{"class":214},[208,3278,1381],{"class":218},[208,3280,387],{"class":214},[208,3282,1386],{"class":236},[208,3284,393],{"class":214},[208,3286,312],{"class":232},[208,3288,256],{"class":214},[208,3290,3291],{"class":210,"line":1395},[208,3292,226],{"emptyLinePlaceholder":225},[208,3294,3295],{"class":210,"line":1400},[208,3296,1403],{"class":349},[208,3298,3299,3301,3303,3305],{"class":210,"line":1406},[208,3300,356],{"class":349},[208,3302,360],{"class":359},[208,3304,363],{"class":359},[208,3306,1105],{"class":349},[208,3308,3309],{"class":210,"line":1417},[208,3310,372],{"class":349},[208,3312,3313,3315,3317,3319,3321,3323,3325,3327],{"class":210,"line":1422},[208,3314,378],{"class":311},[208,3316,381],{"class":214},[208,3318,1118],{"class":218},[208,3320,387],{"class":214},[208,3322,1123],{"class":236},[208,3324,393],{"class":214},[208,3326,312],{"class":232},[208,3328,256],{"class":214},[208,3330,3331],{"class":210,"line":1441},[208,3332,403],{"class":214},[152,3334,3336],{"id":3335},"validation","Validation",[1448,3338,3339],{},[156,3340,3341,3342,3345,3346,3348,3349,2621],{},"Request classes ",[957,3343,3344],{},"must"," extend ",[194,3347,1462],{}," class instead of ",[194,3350,1455],{},[156,3352,3353,3354,2230,3356,3358,3359,3363,3364,2621],{},"To validate incoming request data to ",[194,3355,1468],{},[194,3357,849],{}," endpoints, Orion will try to find ",[160,3360,3362],{"href":1475,"rel":3361},[164],"request class"," for resource model following the class name pattern:\n",[194,3365,1481],{},[156,3367,3368,3369,3371,3372,2621],{},"For example, if you have an ",[194,3370,1487],{}," model, the related request class would be ",[194,3373,1491],{},[156,3375,3376,3377,3379],{},"If request class names in your app do not follow this naming convention or if you just would like to be more explicit, set ",[194,3378,1498],{}," property on controller to a fully-qualified request class name.",[199,3381,3382],{"className":201,"code":1502,"language":203,"meta":204,"style":204},[194,3383,3384,3390,3394,3414,3418,3434,3454,3458,3468,3472,3476,3486,3490,3508,3512,3516,3526,3530,3548],{"__ignoreMap":204},[208,3385,3386,3388],{"class":210,"line":211},[208,3387,215],{"class":214},[208,3389,219],{"class":218},[208,3391,3392],{"class":210,"line":222},[208,3393,226],{"emptyLinePlaceholder":225},[208,3395,3396,3398,3400,3402,3404,3406,3408,3410,3412],{"class":210,"line":229},[208,3397,233],{"class":232},[208,3399,237],{"class":236},[208,3401,240],{"class":214},[208,3403,243],{"class":236},[208,3405,240],{"class":214},[208,3407,248],{"class":236},[208,3409,240],{"class":214},[208,3411,253],{"class":236},[208,3413,256],{"class":214},[208,3415,3416],{"class":210,"line":259},[208,3417,226],{"emptyLinePlaceholder":225},[208,3419,3420,3422,3424,3426,3428,3430,3432],{"class":210,"line":264},[208,3421,267],{"class":232},[208,3423,237],{"class":218},[208,3425,240],{"class":214},[208,3427,94],{"class":218},[208,3429,240],{"class":214},[208,3431,1553],{"class":218},[208,3433,256],{"class":214},[208,3435,3436,3438,3440,3442,3444,3446,3448,3450,3452],{"class":210,"line":283},[208,3437,267],{"class":232},[208,3439,237],{"class":218},[208,3441,240],{"class":214},[208,3443,243],{"class":218},[208,3445,240],{"class":214},[208,3447,1570],{"class":218},[208,3449,240],{"class":214},[208,3451,1575],{"class":218},[208,3453,256],{"class":214},[208,3455,3456],{"class":210,"line":303},[208,3457,226],{"emptyLinePlaceholder":225},[208,3459,3460,3462,3464,3466],{"class":210,"line":308},[208,3461,312],{"class":311},[208,3463,1588],{"class":236},[208,3465,318],{"class":311},[208,3467,321],{"class":236},[208,3469,3470],{"class":210,"line":324},[208,3471,327],{"class":214},[208,3473,3474],{"class":210,"line":330},[208,3475,350],{"class":349},[208,3477,3478,3480,3482,3484],{"class":210,"line":341},[208,3479,356],{"class":349},[208,3481,360],{"class":359},[208,3483,363],{"class":359},[208,3485,366],{"class":349},[208,3487,3488],{"class":210,"line":346},[208,3489,372],{"class":349},[208,3491,3492,3494,3496,3498,3500,3502,3504,3506],{"class":210,"line":353},[208,3493,378],{"class":311},[208,3495,381],{"class":214},[208,3497,384],{"class":218},[208,3499,387],{"class":214},[208,3501,1627],{"class":236},[208,3503,393],{"class":214},[208,3505,312],{"class":232},[208,3507,256],{"class":214},[208,3509,3510],{"class":210,"line":369},[208,3511,226],{"emptyLinePlaceholder":225},[208,3513,3514],{"class":210,"line":375},[208,3515,350],{"class":349},[208,3517,3518,3520,3522,3524],{"class":210,"line":400},[208,3519,1646],{"class":349},[208,3521,360],{"class":359},[208,3523,363],{"class":359},[208,3525,1653],{"class":349},[208,3527,3528],{"class":210,"line":561},[208,3529,1658],{"class":349},[208,3531,3532,3534,3536,3538,3540,3542,3544,3546],{"class":210,"line":599},[208,3533,378],{"class":311},[208,3535,381],{"class":214},[208,3537,1667],{"class":218},[208,3539,387],{"class":214},[208,3541,1672],{"class":236},[208,3543,393],{"class":214},[208,3545,312],{"class":232},[208,3547,256],{"class":214},[208,3549,3550],{"class":210,"line":604},[208,3551,403],{"class":214},[156,3553,3554,3555,3559,3560,2230,3562,3564],{},"The request class is then bound using Laravel ",[160,3556,3558],{"href":1688,"rel":3557},[164],"Service Container"," and used in ",[194,3561,1468],{},[194,3563,849],{}," methods to validate request data the same way as if you would explicitly set it in method signature:",[199,3566,3567],{"className":201,"code":1699,"language":203,"meta":204,"style":204},[194,3568,3569,3587,3591,3595],{"__ignoreMap":204},[208,3570,3571,3573,3575,3577,3579,3581,3583,3585],{"class":210,"line":211},[208,3572,1706],{"class":311},[208,3574,610],{"class":311},[208,3576,1711],{"class":613},[208,3578,640],{"class":214},[208,3580,1575],{"class":236},[208,3582,381],{"class":214},[208,3584,1720],{"class":218},[208,3586,721],{"class":214},[208,3588,3589],{"class":210,"line":222},[208,3590,327],{"class":214},[208,3592,3593],{"class":210,"line":229},[208,3594,1731],{"class":214},[208,3596,3597],{"class":210,"line":259},[208,3598,403],{"class":214},[405,3600,3602],{"id":3601},"validation-rules","Validation Rules",[1740,3604,3606,3607,2230,3609,3611],{"id":3605},"defining-rules-for-store-and-update-operations","Defining rules for ",[194,3608,1468],{},[194,3610,849],{}," operations",[156,3613,3614,3615,3617],{},"Orion provides ",[194,3616,1462],{}," class with a handful of methods to specify validation rules.",[156,3619,3620,3621,2230,3623,3625,3626,3628,3629,2230,3631,3633],{},"To define common rules for both ",[194,3622,1468],{},[194,3624,849],{}," endpoints you can use ",[194,3627,1764],{}," method.\nIf you would like to define rules specific to an endpoint, you can use ",[194,3630,1768],{},[194,3632,1771],{}," methods.",[1448,3635,3636],{},[156,3637,3638,3639,2230,3641,3643,3644,3646],{},"Rules for a particular field specified in the ",[194,3640,1768],{},[194,3642,1771],{}," methods overwrite rules from the ",[194,3645,1764],{}," method, if both contain the same key.",[199,3648,3649],{"className":201,"code":1787,"language":203,"meta":204,"style":204},[194,3650,3651,3657,3661,3677,3681,3701,3705,3715,3719,3733,3737,3743,3759,3763,3767,3771,3785,3789,3795,3811,3815,3819],{"__ignoreMap":204},[208,3652,3653,3655],{"class":210,"line":211},[208,3654,215],{"class":214},[208,3656,219],{"class":218},[208,3658,3659],{"class":210,"line":222},[208,3660,226],{"emptyLinePlaceholder":225},[208,3662,3663,3665,3667,3669,3671,3673,3675],{"class":210,"line":229},[208,3664,233],{"class":232},[208,3666,237],{"class":236},[208,3668,240],{"class":214},[208,3670,243],{"class":236},[208,3672,240],{"class":214},[208,3674,1570],{"class":236},[208,3676,256],{"class":214},[208,3678,3679],{"class":210,"line":259},[208,3680,226],{"emptyLinePlaceholder":225},[208,3682,3683,3685,3687,3689,3691,3693,3695,3697,3699],{"class":210,"line":264},[208,3684,267],{"class":232},[208,3686,288],{"class":218},[208,3688,240],{"class":214},[208,3690,243],{"class":218},[208,3692,240],{"class":214},[208,3694,1570],{"class":218},[208,3696,240],{"class":214},[208,3698,1838],{"class":218},[208,3700,256],{"class":214},[208,3702,3703],{"class":210,"line":283},[208,3704,226],{"emptyLinePlaceholder":225},[208,3706,3707,3709,3711,3713],{"class":210,"line":303},[208,3708,312],{"class":311},[208,3710,1851],{"class":236},[208,3712,318],{"class":311},[208,3714,1856],{"class":236},[208,3716,3717],{"class":210,"line":308},[208,3718,327],{"class":214},[208,3720,3721,3723,3725,3727,3729,3731],{"class":210,"line":324},[208,3722,607],{"class":311},[208,3724,610],{"class":311},[208,3726,1869],{"class":613},[208,3728,1872],{"class":214},[208,3730,1875],{"class":214},[208,3732,1878],{"class":232},[208,3734,3735],{"class":210,"line":330},[208,3736,623],{"class":214},[208,3738,3739,3741],{"class":210,"line":341},[208,3740,629],{"class":569},[208,3742,1889],{"class":214},[208,3744,3745,3747,3749,3751,3753,3755,3757],{"class":210,"line":346},[208,3746,1894],{"class":214},[208,3748,1897],{"class":646},[208,3750,643],{"class":214},[208,3752,1902],{"class":214},[208,3754,1340],{"class":214},[208,3756,1907],{"class":646},[208,3758,1910],{"class":214},[208,3760,3761],{"class":210,"line":353},[208,3762,1915],{"class":214},[208,3764,3765],{"class":210,"line":369},[208,3766,664],{"class":214},[208,3768,3769],{"class":210,"line":375},[208,3770,226],{"emptyLinePlaceholder":225},[208,3772,3773,3775,3777,3779,3781,3783],{"class":210,"line":400},[208,3774,607],{"class":311},[208,3776,610],{"class":311},[208,3778,1932],{"class":613},[208,3780,1872],{"class":214},[208,3782,1875],{"class":214},[208,3784,1878],{"class":232},[208,3786,3787],{"class":210,"line":561},[208,3788,623],{"class":214},[208,3790,3791,3793],{"class":210,"line":599},[208,3792,629],{"class":569},[208,3794,1889],{"class":214},[208,3796,3797,3799,3801,3803,3805,3807,3809],{"class":210,"line":604},[208,3798,1894],{"class":214},[208,3800,1955],{"class":646},[208,3802,643],{"class":214},[208,3804,1902],{"class":214},[208,3806,1340],{"class":214},[208,3808,1964],{"class":646},[208,3810,1910],{"class":214},[208,3812,3813],{"class":210,"line":620},[208,3814,1915],{"class":214},[208,3816,3817],{"class":210,"line":626},[208,3818,664],{"class":214},[208,3820,3821],{"class":210,"line":661},[208,3822,403],{"class":214},[156,3824,3825,3826,3828,3829,2230,3831,3833,3834,3836,3837,3839,3840,3842,3843,3845,3846,3848],{},"In this example, when a request is made to the ",[194,3827,1468],{}," endpoint, both ",[194,3830,1897],{},[194,3832,1955],{}," fields will be required. However, when a request is made to the ",[194,3835,849],{}," endpoint, only the ",[194,3838,1897],{}," field would be required, because there are no other rules defined in the ",[194,3841,1771],{}," method and the ",[194,3844,1897],{}," field is marked as required in the ",[194,3847,1764],{}," method.",[1740,3850,3852],{"id":3851},"defining-rules-for-relation-specific-operations","Defining rules for relation-specific operations",[156,3854,3855,3856,3858,3859,3858,3861,3858,3863,3858,3865,3858,3867,2621],{},"You can also define rules for relation specific endpoints: ",[194,3857,2013],{},", ",[194,3860,2017],{},[194,3862,2020],{},[194,3864,2023],{},[194,3866,2026],{},[194,3868,2029],{},[1448,3870,3871],{},[156,3872,3873,3874,3877,3878,3848],{},"Rules specified in these methods are ",[957,3875,3876],{},"NOT"," merged with rules from the ",[194,3879,1764],{},[1740,3881,3883],{"id":3882},"defining-rules-for-batch-operations","Defining rules for batch operations",[156,3885,3886,3887,3858,3889,2621],{},"You can also define rules for batch endpoints: ",[194,3888,2050],{},[194,3890,2053],{},[405,3892,3894],{"id":3893},"validation-messages","Validation Messages",[156,3896,3897],{},"Just like it is possible to configure the rules for specific endpoints, it is possible to customize their validation messages.",[1740,3899,3901,3902,2230,3904,3611],{"id":3900},"customizing-validation-messages-for-store-and-update-operations","Customizing validation messages for ",[194,3903,1468],{},[194,3905,849],{},[156,3907,3908,3909,2230,3911,3625,3913,3915,3916,2230,3918,3633],{},"To define common messages for both ",[194,3910,1468],{},[194,3912,849],{},[194,3914,2077],{}," method.\nIf you would like to define messages specific to an endpoint, you can use ",[194,3917,2081],{},[194,3919,2084],{},[1448,3921,3922],{},[156,3923,3924,3925,2230,3927,3929,3930,3646],{},"Messages for a particular field specified in the ",[194,3926,2081],{},[194,3928,2084],{}," methods overwrite messages from the ",[194,3931,2077],{},[1740,3933,3935],{"id":3934},"customizing-validation-messages-for-relation-specific-operations","Customizing validation messages for relation-specific operations",[156,3937,3938,3939,3858,3941,3858,3943,3858,3945,3858,3947,3858,3949,2621],{},"You can also customize messages for relation-specific endpoints: ",[194,3940,2105],{},[194,3942,2108],{},[194,3944,2111],{},[194,3946,2114],{},[194,3948,2117],{},[194,3950,2120],{},[1448,3952,3953],{},[156,3954,3955,3956,3958,3959,3848],{},"Messages specified in these methods are ",[957,3957,3876],{}," merged with messages from the ",[194,3960,2077],{},[1740,3962,3964],{"id":3963},"customizing-validation-messages-for-batch-operations","Customizing validation messages for batch operations",[156,3966,3967,3968,3858,3970,2621],{},"You can also customize messages for batch endpoints: ",[194,3969,2139],{},[194,3971,2142],{},[405,3973,3975],{"id":3974},"retrieving-request-data","Retrieving Request Data",[156,3977,3978,3979,3982,3983,3985],{},"By default, upon storing or updating entities, ",[677,3980,3981],{},"all"," request data is retrieved and passed into the ",[194,3984,2155],{}," method on a model.",[156,3987,3988,3989,3991,3992,2402,3994,3996],{},"However, it is possible to pass only the validated data. To do that, set ",[194,3990,2166],{}," to ",[194,3993,2170],{},[194,3995,2162],{}," config file.",[2173,3998,2175],{},{"title":204,"searchDepth":211,"depth":222,"links":4000},[4001,4002,4007],{"id":2206,"depth":222,"text":2207},{"id":2221,"depth":222,"text":2222,"children":4003},[4004,4005,4006],{"id":2389,"depth":229,"text":2390},{"id":2613,"depth":229,"text":2614},{"id":2862,"depth":229,"text":2863},{"id":3335,"depth":222,"text":3336,"children":4008},[4009,4010,4011],{"id":3601,"depth":229,"text":3602},{"id":3893,"depth":229,"text":3894},{"id":3974,"depth":229,"text":3975},"Learn about authentication, authorization, and validation.",{},"\u002Fguide\u002Fsecurity",{"title":118,"description":4012},"1.guide\u002F09.security","8sdxEJCwaW9yj_jBoHDgnTSInANQU1jYWBlCTH8coxU",1784394453995]