[{"data":1,"prerenderedAt":4027},["ShallowReactive",2],{"navigation-ko":3,"navigation-v1":81,"\u002Fko\u002Fguide\u002Fsecurity":146,"\u002Fko\u002Fguide\u002Fsecurity-surround":2206,"\u002Fko\u002Fguide\u002Fsecurity-og":2211},[4,55,77],{"title":5,"path":6,"stem":7,"children":8},"가이드","\u002Fko\u002Fguide","ko\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},"프롤로그","\u002Fko\u002Fguide\u002Fprologue","ko\u002F1.guide\u002F00.prologue",{"title":16,"path":17,"stem":18},"시작하기","\u002Fko\u002Fguide\u002Fgetting-started","ko\u002F1.guide\u002F02.getting-started",{"title":20,"path":21,"stem":22},"모델","\u002Fko\u002Fguide\u002Fmodels","ko\u002F1.guide\u002F03.models",{"title":24,"path":25,"stem":26},"연관관계","\u002Fko\u002Fguide\u002Frelationships","ko\u002F1.guide\u002F04.relationships",{"title":28,"path":29,"stem":30},"훅","\u002Fko\u002Fguide\u002Fhooks","ko\u002F1.guide\u002F05.hooks",{"title":32,"path":33,"stem":34},"검색","\u002Fko\u002Fguide\u002Fsearch","ko\u002F1.guide\u002F06.search",{"title":36,"path":37,"stem":38},"일괄 작업","\u002Fko\u002Fguide\u002Fbatch-operations","ko\u002F1.guide\u002F07.batch-operations",{"title":40,"path":41,"stem":42},"쿼리 파라미터","\u002Fko\u002Fguide\u002Fquery-parameters","ko\u002F1.guide\u002F08.query-parameters",{"title":44,"path":45,"stem":46},"보안","\u002Fko\u002Fguide\u002Fsecurity","ko\u002F1.guide\u002F09.security",{"title":48,"path":49,"stem":50},"응답","\u002Fko\u002Fguide\u002Fresponses","ko\u002F1.guide\u002F10.responses",{"title":52,"path":53,"stem":54},"명세","\u002Fko\u002Fguide\u002Fspecifications","ko\u002F1.guide\u002F11.specifications",{"title":56,"path":57,"stem":58,"children":59},"TypeScript SDK","\u002Fko\u002Ftypescript-sdk","ko\u002F2.typescript-sdk\u002F01.index",[60,61,64,68,71,74],{"title":10,"path":57,"stem":58},{"title":16,"path":62,"stem":63},"\u002Fko\u002Ftypescript-sdk\u002Fgetting-started","ko\u002F2.typescript-sdk\u002F02.getting-started",{"title":65,"path":66,"stem":67},"설정","\u002Fko\u002Ftypescript-sdk\u002Fconfiguration","ko\u002F2.typescript-sdk\u002F03.configuration",{"title":20,"path":69,"stem":70},"\u002Fko\u002Ftypescript-sdk\u002Fmodels","ko\u002F2.typescript-sdk\u002F04.models",{"title":24,"path":72,"stem":73},"\u002Fko\u002Ftypescript-sdk\u002Frelationships","ko\u002F2.typescript-sdk\u002F05.relationships",{"title":40,"path":75,"stem":76},"\u002Fko\u002Ftypescript-sdk\u002Fquery-parameters","ko\u002F2.typescript-sdk\u002F06.query-parameters",{"title":78,"path":79,"stem":80},"스크린캐스트","\u002Fko\u002Fscreencasts","ko\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":2200,"extension":2201,"links":2202,"meta":2203,"navigation":225,"path":45,"seo":2204,"stem":46,"__hash__":2205},"docs_ko\u002Fko\u002F1.guide\u002F09.security.md",{"type":149,"value":150,"toc":2187},"minimark",[151,155,173,176,190,198,404,409,416,431,670,674,682,942,946,956,962,1136,1141,1446,1450,1468,1487,1498,1505,1688,1702,1741,1745,1754,1760,1779,1791,1985,2011,2015,2037,2048,2052,2061,2065,2068,2076,2093,2105,2109,2130,2140,2144,2153,2157,2168,2183],[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,673],{"id":672},"부모-엔티티-인가","부모 엔티티 인가",[156,675,676,677,681],{},"연관관계 작업은 정책에 부모 엔티티라는 추가 인자를 전달합니다. 이 인자를 활용하면 사용자가 ",[678,679,680],"em",{},"특정 부모 엔티티의 컨텍스트 안에서"," 연관관계 엔티티에 대해 특정 작업을 수행할 수 있는지 추가로 검사할 수 있습니다.",[199,683,685],{"className":201,"code":684,"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,686,687,694,698,723,727,755,759,763,767,774,778,809,813,818,823,865,869,874,895,899,934,938],{"__ignoreMap":204},[208,688,689,691],{"class":210,"line":211},[208,690,312],{"class":311},[208,692,693],{"class":236}," PostPolicy\n",[208,695,696],{"class":210,"line":222},[208,697,327],{"class":214},[208,699,700,702,704,707,710,712,715,717,720],{"class":210,"line":229},[208,701,607],{"class":311},[208,703,610],{"class":311},[208,705,706],{"class":613}," update",[208,708,709],{"class":214},"($",[208,711,655],{"class":218},[208,713,714],{"class":214},",",[208,716,381],{"class":214},[208,718,719],{"class":218},"post",[208,721,722],{"class":214},")\n",[208,724,725],{"class":210,"line":259},[208,726,623],{"class":214},[208,728,729,731,733,735,738,741,744,746,748,750,753],{"class":210,"line":264},[208,730,629],{"class":569},[208,732,381],{"class":214},[208,734,719],{"class":218},[208,736,737],{"class":214},"->",[208,739,740],{"class":218},"user_id ",[208,742,743],{"class":214},"===",[208,745,381],{"class":214},[208,747,655],{"class":218},[208,749,737],{"class":214},[208,751,752],{"class":218},"id",[208,754,256],{"class":214},[208,756,757],{"class":210,"line":283},[208,758,664],{"class":214},[208,760,761],{"class":210,"line":303},[208,762,403],{"class":214},[208,764,765],{"class":210,"line":308},[208,766,226],{"emptyLinePlaceholder":225},[208,768,769,771],{"class":210,"line":324},[208,770,312],{"class":311},[208,772,773],{"class":236}," PostMetaPolicy\n",[208,775,776],{"class":210,"line":330},[208,777,327],{"class":214},[208,779,780,782,784,786,788,790,792,794,797,799,801,803,806],{"class":210,"line":341},[208,781,607],{"class":311},[208,783,610],{"class":311},[208,785,706],{"class":613},[208,787,709],{"class":214},[208,789,655],{"class":218},[208,791,714],{"class":214},[208,793,381],{"class":214},[208,795,796],{"class":218},"postMeta",[208,798,714],{"class":214},[208,800,381],{"class":214},[208,802,719],{"class":218},[208,804,805],{"class":214},")",[208,807,808],{"class":349}," \u002F\u002F \u003C---- 여기서 $post는 부모 엔티티입니다\n",[208,810,811],{"class":210,"line":346},[208,812,623],{"class":214},[208,814,815],{"class":210,"line":353},[208,816,817],{"class":349},"        \u002F\u002F 검사는 관계 엔티티 $postMeta가 아니라\n",[208,819,820],{"class":210,"line":369},[208,821,822],{"class":349},"        \u002F\u002F 부모 엔티티 $post에 대해 수행된다는 점에 유의하세요\n",[208,824,825,827,830,832,835,837,839,841,844,846,848,851,853,855,857,859,862],{"class":210,"line":375},[208,826,629],{"class":569},[208,828,829],{"class":236}," Gate",[208,831,393],{"class":214},[208,833,834],{"class":613},"forUser",[208,836,709],{"class":214},[208,838,655],{"class":218},[208,840,652],{"class":214},[208,842,843],{"class":613},"inspect",[208,845,640],{"class":214},[208,847,643],{"class":214},[208,849,850],{"class":646},"update",[208,852,643],{"class":214},[208,854,714],{"class":214},[208,856,381],{"class":214},[208,858,719],{"class":218},[208,860,861],{"class":214},");",[208,863,864],{"class":218}," \n",[208,866,867],{"class":210,"line":400},[208,868,664],{"class":214},[208,870,871],{"class":210,"line":561},[208,872,873],{"class":218},"    \n",[208,875,876,878,880,883,885,887,889,891,893],{"class":210,"line":599},[208,877,607],{"class":311},[208,879,610],{"class":311},[208,881,882],{"class":613}," create",[208,884,709],{"class":214},[208,886,655],{"class":218},[208,888,714],{"class":214},[208,890,381],{"class":214},[208,892,719],{"class":218},[208,894,722],{"class":214},[208,896,897],{"class":210,"line":604},[208,898,623],{"class":214},[208,900,901,903,905,907,909,911,913,915,917,919,921,923,925,927,929,931],{"class":210,"line":620},[208,902,629],{"class":569},[208,904,829],{"class":236},[208,906,393],{"class":214},[208,908,834],{"class":613},[208,910,709],{"class":214},[208,912,655],{"class":218},[208,914,652],{"class":214},[208,916,843],{"class":613},[208,918,640],{"class":214},[208,920,643],{"class":214},[208,922,850],{"class":646},[208,924,643],{"class":214},[208,926,714],{"class":214},[208,928,381],{"class":214},[208,930,719],{"class":218},[208,932,933],{"class":214},");\n",[208,935,936],{"class":210,"line":626},[208,937,664],{"class":214},[208,939,940],{"class":210,"line":661},[208,941,403],{"class":214},[405,943,945],{"id":944},"정책-클래스-커스터마이징","정책 클래스 커스터마이징",[156,947,948,949,166,952,955],{},"동일한 모델이라도 컨트롤러나 상황에 따라 서로 다른 인가 규칙이 적용되는 경우가 흔합니다. 기본적으로 정책은 Laravel의 내장 기능을 통해 결정됩니다. 하지만 특정 컨트롤러에서 특정 정책을 사용하고 싶다면 ",[194,950,951],{},"protected $policy",[194,953,954],{},"protected $parentPolicy"," 변수를 알맞게 설정하세요.",[156,957,958],{},[959,960,961],"strong",{},"모델 컨트롤러",[199,963,965],{"className":201,"code":964,"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,966,967,973,977,997,1001,1017,1035,1039,1049,1053,1057,1067,1071,1089,1093,1097,1108,1112,1132],{"__ignoreMap":204},[208,968,969,971],{"class":210,"line":211},[208,970,215],{"class":214},[208,972,219],{"class":218},[208,974,975],{"class":210,"line":222},[208,976,226],{"emptyLinePlaceholder":225},[208,978,979,981,983,985,987,989,991,993,995],{"class":210,"line":229},[208,980,233],{"class":232},[208,982,237],{"class":236},[208,984,240],{"class":214},[208,986,243],{"class":236},[208,988,240],{"class":214},[208,990,248],{"class":236},[208,992,240],{"class":214},[208,994,253],{"class":236},[208,996,256],{"class":214},[208,998,999],{"class":210,"line":259},[208,1000,226],{"emptyLinePlaceholder":225},[208,1002,1003,1005,1007,1009,1011,1013,1015],{"class":210,"line":264},[208,1004,267],{"class":232},[208,1006,237],{"class":218},[208,1008,240],{"class":214},[208,1010,94],{"class":218},[208,1012,240],{"class":214},[208,1014,278],{"class":218},[208,1016,256],{"class":214},[208,1018,1019,1021,1023,1025,1028,1030,1033],{"class":210,"line":283},[208,1020,267],{"class":232},[208,1022,237],{"class":218},[208,1024,240],{"class":214},[208,1026,1027],{"class":218},"Policies",[208,1029,240],{"class":214},[208,1031,1032],{"class":218},"CustomPostPolicy",[208,1034,256],{"class":214},[208,1036,1037],{"class":210,"line":303},[208,1038,226],{"emptyLinePlaceholder":225},[208,1040,1041,1043,1045,1047],{"class":210,"line":308},[208,1042,312],{"class":311},[208,1044,315],{"class":236},[208,1046,318],{"class":311},[208,1048,321],{"class":236},[208,1050,1051],{"class":210,"line":324},[208,1052,327],{"class":214},[208,1054,1055],{"class":210,"line":330},[208,1056,350],{"class":349},[208,1058,1059,1061,1063,1065],{"class":210,"line":341},[208,1060,356],{"class":349},[208,1062,360],{"class":359},[208,1064,363],{"class":359},[208,1066,366],{"class":349},[208,1068,1069],{"class":210,"line":346},[208,1070,372],{"class":349},[208,1072,1073,1075,1077,1079,1081,1083,1085,1087],{"class":210,"line":353},[208,1074,378],{"class":311},[208,1076,381],{"class":214},[208,1078,384],{"class":218},[208,1080,387],{"class":214},[208,1082,390],{"class":236},[208,1084,393],{"class":214},[208,1086,312],{"class":232},[208,1088,256],{"class":214},[208,1090,1091],{"class":210,"line":369},[208,1092,226],{"emptyLinePlaceholder":225},[208,1094,1095],{"class":210,"line":375},[208,1096,350],{"class":349},[208,1098,1099,1101,1103,1105],{"class":210,"line":400},[208,1100,356],{"class":349},[208,1102,360],{"class":359},[208,1104,363],{"class":359},[208,1106,1107],{"class":349}," $policy\n",[208,1109,1110],{"class":210,"line":561},[208,1111,372],{"class":349},[208,1113,1114,1116,1118,1121,1123,1126,1128,1130],{"class":210,"line":599},[208,1115,378],{"class":311},[208,1117,381],{"class":214},[208,1119,1120],{"class":218},"policy ",[208,1122,387],{"class":214},[208,1124,1125],{"class":236}," CustomPostPolicy",[208,1127,393],{"class":214},[208,1129,312],{"class":232},[208,1131,256],{"class":214},[208,1133,1134],{"class":210,"line":604},[208,1135,403],{"class":214},[156,1137,1138],{},[959,1139,1140],{},"연관관계 컨트롤러",[199,1142,1144],{"className":201,"code":1143,"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,1145,1146,1152,1156,1176,1180,1197,1213,1230,1251,1255,1267,1271,1275,1285,1289,1312,1316,1320,1325,1329,1350,1354,1358,1369,1374,1395,1400,1406,1417,1422,1441],{"__ignoreMap":204},[208,1147,1148,1150],{"class":210,"line":211},[208,1149,215],{"class":214},[208,1151,219],{"class":218},[208,1153,1154],{"class":210,"line":222},[208,1155,226],{"emptyLinePlaceholder":225},[208,1157,1158,1160,1162,1164,1166,1168,1170,1172,1174],{"class":210,"line":229},[208,1159,233],{"class":232},[208,1161,237],{"class":236},[208,1163,240],{"class":214},[208,1165,243],{"class":236},[208,1167,240],{"class":214},[208,1169,248],{"class":236},[208,1171,240],{"class":214},[208,1173,253],{"class":236},[208,1175,256],{"class":214},[208,1177,1178],{"class":210,"line":259},[208,1179,226],{"emptyLinePlaceholder":225},[208,1181,1182,1184,1186,1188,1190,1192,1195],{"class":210,"line":264},[208,1183,267],{"class":232},[208,1185,237],{"class":218},[208,1187,240],{"class":214},[208,1189,94],{"class":218},[208,1191,240],{"class":214},[208,1193,1194],{"class":218},"Team",[208,1196,256],{"class":214},[208,1198,1199,1201,1203,1205,1207,1209,1211],{"class":210,"line":283},[208,1200,267],{"class":232},[208,1202,237],{"class":218},[208,1204,240],{"class":214},[208,1206,1027],{"class":218},[208,1208,240],{"class":214},[208,1210,1032],{"class":218},[208,1212,256],{"class":214},[208,1214,1215,1217,1219,1221,1223,1225,1228],{"class":210,"line":303},[208,1216,267],{"class":232},[208,1218,237],{"class":218},[208,1220,240],{"class":214},[208,1222,1027],{"class":218},[208,1224,240],{"class":214},[208,1226,1227],{"class":218},"CustomTeamPolicy",[208,1229,256],{"class":214},[208,1231,1232,1234,1236,1238,1240,1242,1244,1246,1249],{"class":210,"line":308},[208,1233,267],{"class":232},[208,1235,288],{"class":218},[208,1237,240],{"class":214},[208,1239,243],{"class":218},[208,1241,240],{"class":214},[208,1243,248],{"class":218},[208,1245,240],{"class":214},[208,1247,1248],{"class":218},"RelationController",[208,1250,256],{"class":214},[208,1252,1253],{"class":210,"line":324},[208,1254,226],{"emptyLinePlaceholder":225},[208,1256,1257,1259,1262,1264],{"class":210,"line":330},[208,1258,312],{"class":311},[208,1260,1261],{"class":236}," TeamPostsController",[208,1263,318],{"class":311},[208,1265,1266],{"class":236}," RelationController\n",[208,1268,1269],{"class":210,"line":341},[208,1270,327],{"class":214},[208,1272,1273],{"class":210,"line":346},[208,1274,548],{"class":349},[208,1276,1277,1279,1281,1283],{"class":210,"line":353},[208,1278,356],{"class":349},[208,1280,360],{"class":359},[208,1282,363],{"class":359},[208,1284,366],{"class":349},[208,1286,1287],{"class":210,"line":369},[208,1288,372],{"class":349},[208,1290,1291,1293,1295,1297,1299,1302,1304,1306,1309],{"class":210,"line":375},[208,1292,378],{"class":311},[208,1294,381],{"class":214},[208,1296,384],{"class":218},[208,1298,387],{"class":214},[208,1300,1301],{"class":236}," Team",[208,1303,393],{"class":214},[208,1305,312],{"class":232},[208,1307,1308],{"class":214},";",[208,1310,1311],{"class":349}," \u002F\u002F 또는 \"App\\Models\\Team\"\n",[208,1313,1314],{"class":210,"line":400},[208,1315,873],{"class":218},[208,1317,1318],{"class":210,"line":561},[208,1319,350],{"class":349},[208,1321,1322],{"class":210,"line":599},[208,1323,1324],{"class":349},"     * Post 모델에 정의된 관계 이름\n",[208,1326,1327],{"class":210,"line":604},[208,1328,372],{"class":349},[208,1330,1331,1333,1335,1338,1340,1343,1346,1348],{"class":210,"line":620},[208,1332,378],{"class":311},[208,1334,381],{"class":214},[208,1336,1337],{"class":218},"relation ",[208,1339,387],{"class":214},[208,1341,1342],{"class":214}," '",[208,1344,1345],{"class":646},"posts",[208,1347,643],{"class":214},[208,1349,256],{"class":214},[208,1351,1352],{"class":210,"line":626},[208,1353,226],{"emptyLinePlaceholder":225},[208,1355,1356],{"class":210,"line":661},[208,1357,350],{"class":349},[208,1359,1360,1362,1364,1366],{"class":210,"line":667},[208,1361,356],{"class":349},[208,1363,360],{"class":359},[208,1365,363],{"class":359},[208,1367,1368],{"class":349}," $parentPolicy\n",[208,1370,1372],{"class":210,"line":1371},24,[208,1373,372],{"class":349},[208,1375,1377,1379,1381,1384,1386,1389,1391,1393],{"class":210,"line":1376},25,[208,1378,378],{"class":311},[208,1380,381],{"class":214},[208,1382,1383],{"class":218},"parentPolicy ",[208,1385,387],{"class":214},[208,1387,1388],{"class":236}," CustomTeamPolicy",[208,1390,393],{"class":214},[208,1392,312],{"class":232},[208,1394,256],{"class":214},[208,1396,1398],{"class":210,"line":1397},26,[208,1399,226],{"emptyLinePlaceholder":225},[208,1401,1403],{"class":210,"line":1402},27,[208,1404,1405],{"class":349},"   \u002F**\n",[208,1407,1409,1411,1413,1415],{"class":210,"line":1408},28,[208,1410,356],{"class":349},[208,1412,360],{"class":359},[208,1414,363],{"class":359},[208,1416,1107],{"class":349},[208,1418,1420],{"class":210,"line":1419},29,[208,1421,372],{"class":349},[208,1423,1425,1427,1429,1431,1433,1435,1437,1439],{"class":210,"line":1424},30,[208,1426,378],{"class":311},[208,1428,381],{"class":214},[208,1430,1120],{"class":218},[208,1432,387],{"class":214},[208,1434,1125],{"class":236},[208,1436,393],{"class":214},[208,1438,312],{"class":232},[208,1440,256],{"class":214},[208,1442,1444],{"class":210,"line":1443},31,[208,1445,403],{"class":214},[152,1447,1449],{"id":1448},"유효성-검사","유효성 검사",[1451,1452,1453],"warning",{},[156,1454,1455,1456,1459,1460,1463,1464,1467],{},"요청 클래스는 ",[194,1457,1458],{},"Illuminate\\Foundation\\Http\\FormRequest","가 아니라 ",[959,1461,1462],{},"반드시"," ",[194,1465,1466],{},"Orion\\Http\\Requests\\Request"," 클래스를 상속해야 합니다.",[156,1469,1470,1473,1474,1476,1477,1482,1483,1486],{},[194,1471,1472],{},"store"," 및 ",[194,1475,850],{}," 엔드포인트로 들어오는 요청 데이터의 유효성을 검사하기 위해, Orion은 다음 클래스명 패턴에 따라 리소스 모델의 ",[160,1478,1481],{"href":1479,"rel":1480},"https:\u002F\u002Flaravel.com\u002Fdocs\u002Fvalidation#form-request-validation",[164],"요청 클래스","를 찾습니다:\n",[194,1484,1485],{},"App\\Http\\Requests\\\u003Cmodel>Request",".",[156,1488,1489,1490,1493,1494,1497],{},"예를 들어 ",[194,1491,1492],{},"App\\Models\\Message"," 모델이 있다면, 해당 요청 클래스는 ",[194,1495,1496],{},"App\\Http\\Requests\\MessageRequest","가 됩니다.",[156,1499,1500,1501,1504],{},"앱의 요청 클래스명이 이 명명 규칙을 따르지 않거나 더 명시적으로 지정하고 싶다면, 컨트롤러의 ",[194,1502,1503],{},"protected $request"," 속성에 전체 네임스페이스를 포함한 요청 클래스명을 설정하세요.",[199,1506,1508],{"className":201,"code":1507,"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,1509,1510,1516,1520,1540,1544,1561,1583,1587,1598,1602,1606,1616,1620,1639,1643,1647,1659,1664,1684],{"__ignoreMap":204},[208,1511,1512,1514],{"class":210,"line":211},[208,1513,215],{"class":214},[208,1515,219],{"class":218},[208,1517,1518],{"class":210,"line":222},[208,1519,226],{"emptyLinePlaceholder":225},[208,1521,1522,1524,1526,1528,1530,1532,1534,1536,1538],{"class":210,"line":229},[208,1523,233],{"class":232},[208,1525,237],{"class":236},[208,1527,240],{"class":214},[208,1529,243],{"class":236},[208,1531,240],{"class":214},[208,1533,248],{"class":236},[208,1535,240],{"class":214},[208,1537,253],{"class":236},[208,1539,256],{"class":214},[208,1541,1542],{"class":210,"line":259},[208,1543,226],{"emptyLinePlaceholder":225},[208,1545,1546,1548,1550,1552,1554,1556,1559],{"class":210,"line":264},[208,1547,267],{"class":232},[208,1549,237],{"class":218},[208,1551,240],{"class":214},[208,1553,94],{"class":218},[208,1555,240],{"class":214},[208,1557,1558],{"class":218},"Message",[208,1560,256],{"class":214},[208,1562,1563,1565,1567,1569,1571,1573,1576,1578,1581],{"class":210,"line":283},[208,1564,267],{"class":232},[208,1566,237],{"class":218},[208,1568,240],{"class":214},[208,1570,243],{"class":218},[208,1572,240],{"class":214},[208,1574,1575],{"class":218},"Requests",[208,1577,240],{"class":214},[208,1579,1580],{"class":218},"CustomMessageRequest",[208,1582,256],{"class":214},[208,1584,1585],{"class":210,"line":303},[208,1586,226],{"emptyLinePlaceholder":225},[208,1588,1589,1591,1594,1596],{"class":210,"line":308},[208,1590,312],{"class":311},[208,1592,1593],{"class":236}," MessagesController",[208,1595,318],{"class":311},[208,1597,321],{"class":236},[208,1599,1600],{"class":210,"line":324},[208,1601,327],{"class":214},[208,1603,1604],{"class":210,"line":330},[208,1605,350],{"class":349},[208,1607,1608,1610,1612,1614],{"class":210,"line":341},[208,1609,356],{"class":349},[208,1611,360],{"class":359},[208,1613,363],{"class":359},[208,1615,366],{"class":349},[208,1617,1618],{"class":210,"line":346},[208,1619,372],{"class":349},[208,1621,1622,1624,1626,1628,1630,1633,1635,1637],{"class":210,"line":353},[208,1623,378],{"class":311},[208,1625,381],{"class":214},[208,1627,384],{"class":218},[208,1629,387],{"class":214},[208,1631,1632],{"class":236}," Message",[208,1634,393],{"class":214},[208,1636,312],{"class":232},[208,1638,256],{"class":214},[208,1640,1641],{"class":210,"line":369},[208,1642,226],{"emptyLinePlaceholder":225},[208,1644,1645],{"class":210,"line":375},[208,1646,350],{"class":349},[208,1648,1649,1652,1654,1656],{"class":210,"line":400},[208,1650,1651],{"class":349},"    * ",[208,1653,360],{"class":359},[208,1655,363],{"class":359},[208,1657,1658],{"class":349}," $request\n",[208,1660,1661],{"class":210,"line":561},[208,1662,1663],{"class":349},"    *\u002F\n",[208,1665,1666,1668,1670,1673,1675,1678,1680,1682],{"class":210,"line":599},[208,1667,378],{"class":311},[208,1669,381],{"class":214},[208,1671,1672],{"class":218},"request ",[208,1674,387],{"class":214},[208,1676,1677],{"class":236}," CustomMessageRequest",[208,1679,393],{"class":214},[208,1681,312],{"class":232},[208,1683,256],{"class":214},[208,1685,1686],{"class":210,"line":604},[208,1687,403],{"class":214},[156,1689,1690,1691,1696,1697,1473,1699,1701],{},"이후 요청 클래스는 Laravel ",[160,1692,1695],{"href":1693,"rel":1694},"https:\u002F\u002Flaravel.com\u002Fdocs\u002Fcontainer",[164],"서비스 컨테이너","를 통해 바인딩되며, 메서드 시그니처에 명시적으로 지정했을 때와 동일한 방식으로 ",[194,1698,1472],{},[194,1700,850],{}," 메서드에서 요청 데이터의 유효성을 검사하는 데 사용됩니다:",[199,1703,1705],{"className":201,"code":1704,"language":203,"meta":204,"style":204},"public function store(CustomMessageRequest $request)\n{\n    ...\n}\n",[194,1706,1707,1728,1732,1737],{"__ignoreMap":204},[208,1708,1709,1712,1714,1717,1719,1721,1723,1726],{"class":210,"line":211},[208,1710,1711],{"class":311},"public",[208,1713,610],{"class":311},[208,1715,1716],{"class":613}," store",[208,1718,640],{"class":214},[208,1720,1580],{"class":236},[208,1722,381],{"class":214},[208,1724,1725],{"class":218},"request",[208,1727,722],{"class":214},[208,1729,1730],{"class":210,"line":222},[208,1731,327],{"class":214},[208,1733,1734],{"class":210,"line":229},[208,1735,1736],{"class":214},"    ...\n",[208,1738,1739],{"class":210,"line":259},[208,1740,403],{"class":214},[405,1742,1744],{"id":1743},"유효성-검사-규칙","유효성 검사 규칙",[1746,1747,1749,1473,1751,1753],"h4",{"id":1748},"store-및-update-작업의-규칙-정의",[194,1750,1472],{},[194,1752,850],{}," 작업의 규칙 정의",[156,1755,1756,1757,1759],{},"Orion이 제공하는 ",[194,1758,1466],{}," 클래스에는 유효성 검사 규칙을 지정하기 위한 여러 메서드가 있습니다.",[156,1761,1762,1764,1765,1767,1768,1771,1772,1764,1775,1778],{},[194,1763,1472],{},"와 ",[194,1766,850],{}," 엔드포인트에 공통으로 적용되는 규칙은 ",[194,1769,1770],{},"commonRules"," 메서드로 정의할 수 있습니다.\n특정 엔드포인트에만 적용되는 규칙을 정의하려면 ",[194,1773,1774],{},"storeRules",[194,1776,1777],{},"updateRules"," 메서드를 사용하세요.",[1451,1780,1781],{},[156,1782,1783,1473,1785,1787,1788,1790],{},[194,1784,1774],{},[194,1786,1777],{}," 메서드에 지정한 특정 필드의 규칙은, 동일한 키가 양쪽에 존재하는 경우 ",[194,1789,1770],{}," 메서드의 규칙을 덮어씁니다.",[199,1792,1794],{"className":201,"code":1793,"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,1795,1796,1802,1806,1822,1826,1847,1851,1863,1867,1885,1889,1896,1917,1922,1926,1930,1945,1949,1955,1973,1977,1981],{"__ignoreMap":204},[208,1797,1798,1800],{"class":210,"line":211},[208,1799,215],{"class":214},[208,1801,219],{"class":218},[208,1803,1804],{"class":210,"line":222},[208,1805,226],{"emptyLinePlaceholder":225},[208,1807,1808,1810,1812,1814,1816,1818,1820],{"class":210,"line":229},[208,1809,233],{"class":232},[208,1811,237],{"class":236},[208,1813,240],{"class":214},[208,1815,243],{"class":236},[208,1817,240],{"class":214},[208,1819,1575],{"class":236},[208,1821,256],{"class":214},[208,1823,1824],{"class":210,"line":259},[208,1825,226],{"emptyLinePlaceholder":225},[208,1827,1828,1830,1832,1834,1836,1838,1840,1842,1845],{"class":210,"line":264},[208,1829,267],{"class":232},[208,1831,288],{"class":218},[208,1833,240],{"class":214},[208,1835,243],{"class":218},[208,1837,240],{"class":214},[208,1839,1575],{"class":218},[208,1841,240],{"class":214},[208,1843,1844],{"class":218},"Request",[208,1846,256],{"class":214},[208,1848,1849],{"class":210,"line":283},[208,1850,226],{"emptyLinePlaceholder":225},[208,1852,1853,1855,1858,1860],{"class":210,"line":303},[208,1854,312],{"class":311},[208,1856,1857],{"class":236}," PostRequest",[208,1859,318],{"class":311},[208,1861,1862],{"class":236}," Request\n",[208,1864,1865],{"class":210,"line":308},[208,1866,327],{"class":214},[208,1868,1869,1871,1873,1876,1879,1882],{"class":210,"line":324},[208,1870,607],{"class":311},[208,1872,610],{"class":311},[208,1874,1875],{"class":613}," commonRules",[208,1877,1878],{"class":214},"()",[208,1880,1881],{"class":214}," :",[208,1883,1884],{"class":232}," array\n",[208,1886,1887],{"class":210,"line":330},[208,1888,623],{"class":214},[208,1890,1891,1893],{"class":210,"line":341},[208,1892,629],{"class":569},[208,1894,1895],{"class":214}," [\n",[208,1897,1898,1901,1904,1906,1909,1911,1914],{"class":210,"line":346},[208,1899,1900],{"class":214},"            '",[208,1902,1903],{"class":646},"title",[208,1905,643],{"class":214},[208,1907,1908],{"class":214}," =>",[208,1910,1342],{"class":214},[208,1912,1913],{"class":646},"required",[208,1915,1916],{"class":214},"'\n",[208,1918,1919],{"class":210,"line":353},[208,1920,1921],{"class":214},"        ];\n",[208,1923,1924],{"class":210,"line":369},[208,1925,664],{"class":214},[208,1927,1928],{"class":210,"line":375},[208,1929,226],{"emptyLinePlaceholder":225},[208,1931,1932,1934,1936,1939,1941,1943],{"class":210,"line":400},[208,1933,607],{"class":311},[208,1935,610],{"class":311},[208,1937,1938],{"class":613}," storeRules",[208,1940,1878],{"class":214},[208,1942,1881],{"class":214},[208,1944,1884],{"class":232},[208,1946,1947],{"class":210,"line":561},[208,1948,623],{"class":214},[208,1950,1951,1953],{"class":210,"line":599},[208,1952,629],{"class":569},[208,1954,1895],{"class":214},[208,1956,1957,1959,1962,1964,1966,1968,1971],{"class":210,"line":604},[208,1958,1900],{"class":214},[208,1960,1961],{"class":646},"status",[208,1963,643],{"class":214},[208,1965,1908],{"class":214},[208,1967,1342],{"class":214},[208,1969,1970],{"class":646},"required|in:draft,review",[208,1972,1916],{"class":214},[208,1974,1975],{"class":210,"line":620},[208,1976,1921],{"class":214},[208,1978,1979],{"class":210,"line":626},[208,1980,664],{"class":214},[208,1982,1983],{"class":210,"line":661},[208,1984,403],{"class":214},[156,1986,1987,1988,1990,1991,1993,1994,1996,1997,1990,1999,2001,2002,2004,2005,2007,2008,2010],{},"이 예시에서 ",[194,1989,1472],{}," 엔드포인트로 요청이 들어오면 ",[194,1992,1903],{},"과 ",[194,1995,1961],{}," 필드가 모두 필수입니다. 반면 ",[194,1998,850],{},[194,2000,1903],{}," 필드만 필수입니다. ",[194,2003,1777],{}," 메서드에 별도의 규칙이 정의되어 있지 않고, ",[194,2006,1903],{}," 필드는 ",[194,2009,1770],{}," 메서드에서 필수로 지정되어 있기 때문입니다.",[1746,2012,2014],{"id":2013},"연관관계-전용-작업의-규칙-정의","연관관계 전용 작업의 규칙 정의",[156,2016,2017,2018,2021,2022,2021,2025,2021,2028,2021,2031,2021,2034,1486],{},"연관관계 전용 엔드포인트의 규칙도 정의할 수 있습니다: ",[194,2019,2020],{},"associateRules",", ",[194,2023,2024],{},"attachRules",[194,2026,2027],{},"detachRules",[194,2029,2030],{},"syncRules",[194,2032,2033],{},"toggleRules",[194,2035,2036],{},"updatePivotRules",[1451,2038,2039],{},[156,2040,2041,2042,2044,2045,1486],{},"이들 메서드에 지정한 규칙은 ",[194,2043,1770],{}," 메서드의 규칙과 병합되지 ",[959,2046,2047],{},"않습니다",[1746,2049,2051],{"id":2050},"일괄-작업의-규칙-정의","일괄 작업의 규칙 정의",[156,2053,2054,2055,2021,2058,1486],{},"일괄 작업 엔드포인트의 규칙도 정의할 수 있습니다: ",[194,2056,2057],{},"batchStoreRules",[194,2059,2060],{},"batchUpdateRules",[405,2062,2064],{"id":2063},"유효성-검사-메시지","유효성 검사 메시지",[156,2066,2067],{},"특정 엔드포인트의 규칙을 설정할 수 있는 것과 마찬가지로, 유효성 검사 메시지도 커스터마이징할 수 있습니다.",[1746,2069,2071,1473,2073,2075],{"id":2070},"store-및-update-작업의-유효성-검사-메시지-커스터마이징",[194,2072,1472],{},[194,2074,850],{}," 작업의 유효성 검사 메시지 커스터마이징",[156,2077,2078,1764,2080,2082,2083,2086,2087,1764,2090,1778],{},[194,2079,1472],{},[194,2081,850],{}," 엔드포인트에 공통으로 적용되는 메시지는 ",[194,2084,2085],{},"commonMessages"," 메서드로 정의할 수 있습니다.\n특정 엔드포인트에만 적용되는 메시지를 정의하려면 ",[194,2088,2089],{},"storeMessages",[194,2091,2092],{},"updateMessages",[1451,2094,2095],{},[156,2096,2097,1473,2099,2101,2102,2104],{},[194,2098,2089],{},[194,2100,2092],{}," 메서드에 지정한 특정 필드의 메시지는, 동일한 키가 양쪽에 존재하는 경우 ",[194,2103,2085],{}," 메서드의 메시지를 덮어씁니다.",[1746,2106,2108],{"id":2107},"연관관계-전용-작업의-유효성-검사-메시지-커스터마이징","연관관계 전용 작업의 유효성 검사 메시지 커스터마이징",[156,2110,2111,2112,2021,2115,2021,2118,2021,2121,2021,2124,2021,2127,1486],{},"연관관계 전용 엔드포인트의 메시지도 커스터마이징할 수 있습니다: ",[194,2113,2114],{},"associateMessages",[194,2116,2117],{},"attachMessages",[194,2119,2120],{},"detachMessages",[194,2122,2123],{},"syncMessages",[194,2125,2126],{},"toggleMessages",[194,2128,2129],{},"updatePivotMessages",[1451,2131,2132],{},[156,2133,2134,2135,2137,2138,1486],{},"이들 메서드에 지정한 메시지는 ",[194,2136,2085],{}," 메서드의 메시지와 병합되지 ",[959,2139,2047],{},[1746,2141,2143],{"id":2142},"일괄-작업의-유효성-검사-메시지-커스터마이징","일괄 작업의 유효성 검사 메시지 커스터마이징",[156,2145,2146,2147,2021,2150,1486],{},"일괄 작업 엔드포인트의 메시지도 커스터마이징할 수 있습니다: ",[194,2148,2149],{},"batchStoreMessages",[194,2151,2152],{},"batchUpdateMessages",[405,2154,2156],{"id":2155},"요청-데이터-가져오기","요청 데이터 가져오기",[156,2158,2159,2160,2163,2164,2167],{},"기본적으로 엔티티를 저장하거나 수정할 때 ",[678,2161,2162],{},"모든"," 요청 데이터가 조회되어 모델의 ",[194,2165,2166],{},"fill"," 메서드에 전달됩니다.",[156,2169,2170,2171,2174,2175,2178,2179,2182],{},"하지만 유효성 검사를 통과한 데이터만 전달하도록 할 수도 있습니다. 이를 위해서는 ",[194,2172,2173],{},"orion.php"," 설정 파일에서 ",[194,2176,2177],{},"use_validated","를 ",[194,2180,2181],{},"true","로 설정하세요.",[2184,2185,2186],"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":2188},[2189,2190,2195],{"id":154,"depth":222,"text":154},{"id":175,"depth":222,"text":175,"children":2191},[2192,2193,2194],{"id":407,"depth":229,"text":408},{"id":672,"depth":229,"text":673},{"id":944,"depth":229,"text":945},{"id":1448,"depth":222,"text":1449,"children":2196},[2197,2198,2199],{"id":1743,"depth":229,"text":1744},{"id":2063,"depth":229,"text":2064},{"id":2155,"depth":229,"text":2156},"인증, 인가, 유효성 검사에 대해 알아봅니다.","md",null,{},{"title":44,"description":2200},"HvZ7W6RMAc019OlluQL7WlGnJq8F06NnKe5Xge1-ELo",[2207,2209],{"title":40,"path":41,"stem":42,"description":2208,"children":-1},"사용 가능한 쿼리 파라미터와 그 활용 방법을 알아봅니다.",{"title":48,"path":49,"stem":50,"description":2210,"children":-1},"모델이 JSON 응답으로 변환되는 방식을 알아봅니다.",{"id":2212,"title":118,"body":2213,"description":4021,"extension":2201,"links":2202,"meta":4022,"navigation":225,"path":4023,"seo":4024,"stem":4025,"__hash__":4026},"docs_en\u002F1.guide\u002F09.security.md",{"type":149,"value":2214,"toc":4008},[2215,2219,2230,2234,2252,2258,2398,2402,2408,2420,2622,2626,2632,2870,2874,2882,2887,3055,3060,3343,3347,3361,3376,3384,3390,3562,3575,3609,3613,3622,3628,3644,3657,3833,3859,3863,3878,3889,3893,3900,3904,3907,3915,3929,3941,3945,3960,3970,3974,3981,3985,3995,4006],[152,2216,2218],{"id":2217},"authentication","Authentication",[156,2220,2221,2222,2225,2226,2229],{},"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,2223,165],{"href":162,"rel":2224},[164]," or ",[160,2227,171],{"href":169,"rel":2228},[164]," for this purpose.",[152,2231,2233],{"id":2232},"authorization","Authorization",[156,2235,2236,2237,2241,2242,2246,2247,2251],{},"Both ",[160,2238,2240],{"href":2239},"\u002Fguide\u002Fmodels","model"," and ",[160,2243,2245],{"href":2244},"\u002Fguide\u002Frelationships","relation"," controllers rely on ",[160,2248,2250],{"href":186,"rel":2249},[164],"model policies"," to determine whether the currently authenticated user is allowed to perform certain actions or not.",[156,2253,2254,2255,2257],{},"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,2256,196],{}," trait.",[199,2259,2260],{"className":201,"code":202,"language":203,"meta":204,"style":204},[194,2261,2262,2268,2272,2292,2296,2312,2328,2332,2342,2346,2354,2358,2362,2372,2376,2394],{"__ignoreMap":204},[208,2263,2264,2266],{"class":210,"line":211},[208,2265,215],{"class":214},[208,2267,219],{"class":218},[208,2269,2270],{"class":210,"line":222},[208,2271,226],{"emptyLinePlaceholder":225},[208,2273,2274,2276,2278,2280,2282,2284,2286,2288,2290],{"class":210,"line":229},[208,2275,233],{"class":232},[208,2277,237],{"class":236},[208,2279,240],{"class":214},[208,2281,243],{"class":236},[208,2283,240],{"class":214},[208,2285,248],{"class":236},[208,2287,240],{"class":214},[208,2289,253],{"class":236},[208,2291,256],{"class":214},[208,2293,2294],{"class":210,"line":259},[208,2295,226],{"emptyLinePlaceholder":225},[208,2297,2298,2300,2302,2304,2306,2308,2310],{"class":210,"line":264},[208,2299,267],{"class":232},[208,2301,237],{"class":218},[208,2303,240],{"class":214},[208,2305,94],{"class":218},[208,2307,240],{"class":214},[208,2309,278],{"class":218},[208,2311,256],{"class":214},[208,2313,2314,2316,2318,2320,2322,2324,2326],{"class":210,"line":283},[208,2315,267],{"class":232},[208,2317,288],{"class":218},[208,2319,240],{"class":214},[208,2321,293],{"class":218},[208,2323,240],{"class":214},[208,2325,298],{"class":218},[208,2327,256],{"class":214},[208,2329,2330],{"class":210,"line":303},[208,2331,226],{"emptyLinePlaceholder":225},[208,2333,2334,2336,2338,2340],{"class":210,"line":308},[208,2335,312],{"class":311},[208,2337,315],{"class":236},[208,2339,318],{"class":311},[208,2341,321],{"class":236},[208,2343,2344],{"class":210,"line":324},[208,2345,327],{"class":214},[208,2347,2348,2350,2352],{"class":210,"line":330},[208,2349,333],{"class":232},[208,2351,336],{"class":218},[208,2353,256],{"class":214},[208,2355,2356],{"class":210,"line":341},[208,2357,226],{"emptyLinePlaceholder":225},[208,2359,2360],{"class":210,"line":346},[208,2361,350],{"class":349},[208,2363,2364,2366,2368,2370],{"class":210,"line":353},[208,2365,356],{"class":349},[208,2367,360],{"class":359},[208,2369,363],{"class":359},[208,2371,366],{"class":349},[208,2373,2374],{"class":210,"line":369},[208,2375,372],{"class":349},[208,2377,2378,2380,2382,2384,2386,2388,2390,2392],{"class":210,"line":375},[208,2379,378],{"class":311},[208,2381,381],{"class":214},[208,2383,384],{"class":218},[208,2385,387],{"class":214},[208,2387,390],{"class":236},[208,2389,393],{"class":214},[208,2391,312],{"class":232},[208,2393,256],{"class":214},[208,2395,2396],{"class":210,"line":400},[208,2397,403],{"class":214},[405,2399,2401],{"id":2400},"usage-with-sanctum-or-any-other-custom-auth-guard","Usage with Sanctum (or any other custom Auth guard)",[156,2403,2404,2405,2407],{},"By default, the ",[194,2406,414],{}," guard is used to resolve the currently authenticated user for authorization.",[156,2409,2410,2411,2413,2414,2416,2417,2419],{},"However, you can change the way users are resolved either by setting ",[194,2412,425],{}," in ",[194,2415,421],{}," or by overriding ",[194,2418,429],{}," method on a controller.",[199,2421,2423],{"className":201,"code":2422,"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,2424,2425,2431,2435,2455,2459,2475,2479,2489,2493,2497,2507,2511,2529,2533,2537,2542,2546,2572,2576,2586,2590,2614,2618],{"__ignoreMap":204},[208,2426,2427,2429],{"class":210,"line":211},[208,2428,215],{"class":214},[208,2430,219],{"class":218},[208,2432,2433],{"class":210,"line":222},[208,2434,226],{"emptyLinePlaceholder":225},[208,2436,2437,2439,2441,2443,2445,2447,2449,2451,2453],{"class":210,"line":229},[208,2438,233],{"class":232},[208,2440,237],{"class":236},[208,2442,240],{"class":214},[208,2444,243],{"class":236},[208,2446,240],{"class":214},[208,2448,248],{"class":236},[208,2450,240],{"class":214},[208,2452,253],{"class":236},[208,2454,256],{"class":214},[208,2456,2457],{"class":210,"line":259},[208,2458,226],{"emptyLinePlaceholder":225},[208,2460,2461,2463,2465,2467,2469,2471,2473],{"class":210,"line":264},[208,2462,267],{"class":232},[208,2464,237],{"class":218},[208,2466,240],{"class":214},[208,2468,94],{"class":218},[208,2470,240],{"class":214},[208,2472,278],{"class":218},[208,2474,256],{"class":214},[208,2476,2477],{"class":210,"line":283},[208,2478,226],{"emptyLinePlaceholder":225},[208,2480,2481,2483,2485,2487],{"class":210,"line":303},[208,2482,312],{"class":311},[208,2484,315],{"class":236},[208,2486,318],{"class":311},[208,2488,321],{"class":236},[208,2490,2491],{"class":210,"line":308},[208,2492,327],{"class":214},[208,2494,2495],{"class":210,"line":324},[208,2496,350],{"class":349},[208,2498,2499,2501,2503,2505],{"class":210,"line":330},[208,2500,356],{"class":349},[208,2502,360],{"class":359},[208,2504,363],{"class":359},[208,2506,366],{"class":349},[208,2508,2509],{"class":210,"line":341},[208,2510,372],{"class":349},[208,2512,2513,2515,2517,2519,2521,2523,2525,2527],{"class":210,"line":346},[208,2514,378],{"class":311},[208,2516,381],{"class":214},[208,2518,384],{"class":218},[208,2520,387],{"class":214},[208,2522,390],{"class":236},[208,2524,393],{"class":214},[208,2526,312],{"class":232},[208,2528,256],{"class":214},[208,2530,2531],{"class":210,"line":353},[208,2532,226],{"emptyLinePlaceholder":225},[208,2534,2535],{"class":210,"line":369},[208,2536,548],{"class":349},[208,2538,2539],{"class":210,"line":375},[208,2540,2541],{"class":349},"     * Retrieves currently authenticated user based on the guard.\n",[208,2543,2544],{"class":210,"line":400},[208,2545,558],{"class":349},[208,2547,2548,2550,2552,2554,2556,2558,2560,2562,2564,2566,2568,2570],{"class":210,"line":561},[208,2549,356],{"class":349},[208,2551,566],{"class":359},[208,2553,570],{"class":569},[208,2555,574],{"class":573},[208,2557,240],{"class":569},[208,2559,579],{"class":573},[208,2561,240],{"class":569},[208,2563,584],{"class":573},[208,2565,240],{"class":569},[208,2567,590],{"class":589},[208,2569,593],{"class":569},[208,2571,596],{"class":359},[208,2573,2574],{"class":210,"line":599},[208,2575,372],{"class":349},[208,2577,2578,2580,2582,2584],{"class":210,"line":604},[208,2579,607],{"class":311},[208,2581,610],{"class":311},[208,2583,614],{"class":613},[208,2585,617],{"class":214},[208,2587,2588],{"class":210,"line":620},[208,2589,623],{"class":214},[208,2591,2592,2594,2596,2598,2600,2602,2604,2606,2608,2610,2612],{"class":210,"line":626},[208,2593,629],{"class":569},[208,2595,632],{"class":236},[208,2597,393],{"class":214},[208,2599,637],{"class":613},[208,2601,640],{"class":214},[208,2603,643],{"class":214},[208,2605,647],{"class":646},[208,2607,643],{"class":214},[208,2609,652],{"class":214},[208,2611,655],{"class":613},[208,2613,658],{"class":214},[208,2615,2616],{"class":210,"line":661},[208,2617,664],{"class":214},[208,2619,2620],{"class":210,"line":667},[208,2621,403],{"class":214},[405,2623,2625],{"id":2624},"authorizing-parent-entities","Authorizing Parent Entities",[156,2627,2628,2629,1486],{},"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 ",[678,2630,2631],{},"in the context of a given parent entity",[199,2633,2635],{"className":201,"code":2634,"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,2636,2637,2643,2647,2667,2671,2695,2699,2703,2707,2713,2717,2746,2750,2755,2760,2796,2800,2804,2824,2828,2862,2866],{"__ignoreMap":204},[208,2638,2639,2641],{"class":210,"line":211},[208,2640,312],{"class":311},[208,2642,693],{"class":236},[208,2644,2645],{"class":210,"line":222},[208,2646,327],{"class":214},[208,2648,2649,2651,2653,2655,2657,2659,2661,2663,2665],{"class":210,"line":229},[208,2650,607],{"class":311},[208,2652,610],{"class":311},[208,2654,706],{"class":613},[208,2656,709],{"class":214},[208,2658,655],{"class":218},[208,2660,714],{"class":214},[208,2662,381],{"class":214},[208,2664,719],{"class":218},[208,2666,722],{"class":214},[208,2668,2669],{"class":210,"line":259},[208,2670,623],{"class":214},[208,2672,2673,2675,2677,2679,2681,2683,2685,2687,2689,2691,2693],{"class":210,"line":264},[208,2674,629],{"class":569},[208,2676,381],{"class":214},[208,2678,719],{"class":218},[208,2680,737],{"class":214},[208,2682,740],{"class":218},[208,2684,743],{"class":214},[208,2686,381],{"class":214},[208,2688,655],{"class":218},[208,2690,737],{"class":214},[208,2692,752],{"class":218},[208,2694,256],{"class":214},[208,2696,2697],{"class":210,"line":283},[208,2698,664],{"class":214},[208,2700,2701],{"class":210,"line":303},[208,2702,403],{"class":214},[208,2704,2705],{"class":210,"line":308},[208,2706,226],{"emptyLinePlaceholder":225},[208,2708,2709,2711],{"class":210,"line":324},[208,2710,312],{"class":311},[208,2712,773],{"class":236},[208,2714,2715],{"class":210,"line":330},[208,2716,327],{"class":214},[208,2718,2719,2721,2723,2725,2727,2729,2731,2733,2735,2737,2739,2741,2743],{"class":210,"line":341},[208,2720,607],{"class":311},[208,2722,610],{"class":311},[208,2724,706],{"class":613},[208,2726,709],{"class":214},[208,2728,655],{"class":218},[208,2730,714],{"class":214},[208,2732,381],{"class":214},[208,2734,796],{"class":218},[208,2736,714],{"class":214},[208,2738,381],{"class":214},[208,2740,719],{"class":218},[208,2742,805],{"class":214},[208,2744,2745],{"class":349}," \u002F\u002F \u003C---- $post here is the parent entity\n",[208,2747,2748],{"class":210,"line":346},[208,2749,623],{"class":214},[208,2751,2752],{"class":210,"line":353},[208,2753,2754],{"class":349},"        \u002F\u002F please note that the check is performed against\n",[208,2756,2757],{"class":210,"line":369},[208,2758,2759],{"class":349},"        \u002F\u002F the parent entity $post, not the relation entity $postMeta\n",[208,2761,2762,2764,2766,2768,2770,2772,2774,2776,2778,2780,2782,2784,2786,2788,2790,2792,2794],{"class":210,"line":375},[208,2763,629],{"class":569},[208,2765,829],{"class":236},[208,2767,393],{"class":214},[208,2769,834],{"class":613},[208,2771,709],{"class":214},[208,2773,655],{"class":218},[208,2775,652],{"class":214},[208,2777,843],{"class":613},[208,2779,640],{"class":214},[208,2781,643],{"class":214},[208,2783,850],{"class":646},[208,2785,643],{"class":214},[208,2787,714],{"class":214},[208,2789,381],{"class":214},[208,2791,719],{"class":218},[208,2793,861],{"class":214},[208,2795,864],{"class":218},[208,2797,2798],{"class":210,"line":400},[208,2799,664],{"class":214},[208,2801,2802],{"class":210,"line":561},[208,2803,873],{"class":218},[208,2805,2806,2808,2810,2812,2814,2816,2818,2820,2822],{"class":210,"line":599},[208,2807,607],{"class":311},[208,2809,610],{"class":311},[208,2811,882],{"class":613},[208,2813,709],{"class":214},[208,2815,655],{"class":218},[208,2817,714],{"class":214},[208,2819,381],{"class":214},[208,2821,719],{"class":218},[208,2823,722],{"class":214},[208,2825,2826],{"class":210,"line":604},[208,2827,623],{"class":214},[208,2829,2830,2832,2834,2836,2838,2840,2842,2844,2846,2848,2850,2852,2854,2856,2858,2860],{"class":210,"line":620},[208,2831,629],{"class":569},[208,2833,829],{"class":236},[208,2835,393],{"class":214},[208,2837,834],{"class":613},[208,2839,709],{"class":214},[208,2841,655],{"class":218},[208,2843,652],{"class":214},[208,2845,843],{"class":613},[208,2847,640],{"class":214},[208,2849,643],{"class":214},[208,2851,850],{"class":646},[208,2853,643],{"class":214},[208,2855,714],{"class":214},[208,2857,381],{"class":214},[208,2859,719],{"class":218},[208,2861,933],{"class":214},[208,2863,2864],{"class":210,"line":626},[208,2865,664],{"class":214},[208,2867,2868],{"class":210,"line":661},[208,2869,403],{"class":214},[405,2871,2873],{"id":2872},"customizing-policy-classes","Customizing Policy Classes",[156,2875,2876,2877,2225,2879,2881],{},"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,2878,951],{},[194,2880,954],{}," variables accordingly:",[156,2883,2884],{},[959,2885,2886],{},"Model controller",[199,2888,2889],{"className":201,"code":964,"language":203,"meta":204,"style":204},[194,2890,2891,2897,2901,2921,2925,2941,2957,2961,2971,2975,2979,2989,2993,3011,3015,3019,3029,3033,3051],{"__ignoreMap":204},[208,2892,2893,2895],{"class":210,"line":211},[208,2894,215],{"class":214},[208,2896,219],{"class":218},[208,2898,2899],{"class":210,"line":222},[208,2900,226],{"emptyLinePlaceholder":225},[208,2902,2903,2905,2907,2909,2911,2913,2915,2917,2919],{"class":210,"line":229},[208,2904,233],{"class":232},[208,2906,237],{"class":236},[208,2908,240],{"class":214},[208,2910,243],{"class":236},[208,2912,240],{"class":214},[208,2914,248],{"class":236},[208,2916,240],{"class":214},[208,2918,253],{"class":236},[208,2920,256],{"class":214},[208,2922,2923],{"class":210,"line":259},[208,2924,226],{"emptyLinePlaceholder":225},[208,2926,2927,2929,2931,2933,2935,2937,2939],{"class":210,"line":264},[208,2928,267],{"class":232},[208,2930,237],{"class":218},[208,2932,240],{"class":214},[208,2934,94],{"class":218},[208,2936,240],{"class":214},[208,2938,278],{"class":218},[208,2940,256],{"class":214},[208,2942,2943,2945,2947,2949,2951,2953,2955],{"class":210,"line":283},[208,2944,267],{"class":232},[208,2946,237],{"class":218},[208,2948,240],{"class":214},[208,2950,1027],{"class":218},[208,2952,240],{"class":214},[208,2954,1032],{"class":218},[208,2956,256],{"class":214},[208,2958,2959],{"class":210,"line":303},[208,2960,226],{"emptyLinePlaceholder":225},[208,2962,2963,2965,2967,2969],{"class":210,"line":308},[208,2964,312],{"class":311},[208,2966,315],{"class":236},[208,2968,318],{"class":311},[208,2970,321],{"class":236},[208,2972,2973],{"class":210,"line":324},[208,2974,327],{"class":214},[208,2976,2977],{"class":210,"line":330},[208,2978,350],{"class":349},[208,2980,2981,2983,2985,2987],{"class":210,"line":341},[208,2982,356],{"class":349},[208,2984,360],{"class":359},[208,2986,363],{"class":359},[208,2988,366],{"class":349},[208,2990,2991],{"class":210,"line":346},[208,2992,372],{"class":349},[208,2994,2995,2997,2999,3001,3003,3005,3007,3009],{"class":210,"line":353},[208,2996,378],{"class":311},[208,2998,381],{"class":214},[208,3000,384],{"class":218},[208,3002,387],{"class":214},[208,3004,390],{"class":236},[208,3006,393],{"class":214},[208,3008,312],{"class":232},[208,3010,256],{"class":214},[208,3012,3013],{"class":210,"line":369},[208,3014,226],{"emptyLinePlaceholder":225},[208,3016,3017],{"class":210,"line":375},[208,3018,350],{"class":349},[208,3020,3021,3023,3025,3027],{"class":210,"line":400},[208,3022,356],{"class":349},[208,3024,360],{"class":359},[208,3026,363],{"class":359},[208,3028,1107],{"class":349},[208,3030,3031],{"class":210,"line":561},[208,3032,372],{"class":349},[208,3034,3035,3037,3039,3041,3043,3045,3047,3049],{"class":210,"line":599},[208,3036,378],{"class":311},[208,3038,381],{"class":214},[208,3040,1120],{"class":218},[208,3042,387],{"class":214},[208,3044,1125],{"class":236},[208,3046,393],{"class":214},[208,3048,312],{"class":232},[208,3050,256],{"class":214},[208,3052,3053],{"class":210,"line":604},[208,3054,403],{"class":214},[156,3056,3057],{},[959,3058,3059],{},"Relation controller",[199,3061,3063],{"className":201,"code":3062,"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,3064,3065,3071,3075,3095,3099,3115,3131,3147,3167,3171,3181,3185,3189,3199,3203,3224,3228,3232,3237,3241,3259,3263,3267,3277,3281,3299,3303,3307,3317,3321,3339],{"__ignoreMap":204},[208,3066,3067,3069],{"class":210,"line":211},[208,3068,215],{"class":214},[208,3070,219],{"class":218},[208,3072,3073],{"class":210,"line":222},[208,3074,226],{"emptyLinePlaceholder":225},[208,3076,3077,3079,3081,3083,3085,3087,3089,3091,3093],{"class":210,"line":229},[208,3078,233],{"class":232},[208,3080,237],{"class":236},[208,3082,240],{"class":214},[208,3084,243],{"class":236},[208,3086,240],{"class":214},[208,3088,248],{"class":236},[208,3090,240],{"class":214},[208,3092,253],{"class":236},[208,3094,256],{"class":214},[208,3096,3097],{"class":210,"line":259},[208,3098,226],{"emptyLinePlaceholder":225},[208,3100,3101,3103,3105,3107,3109,3111,3113],{"class":210,"line":264},[208,3102,267],{"class":232},[208,3104,237],{"class":218},[208,3106,240],{"class":214},[208,3108,94],{"class":218},[208,3110,240],{"class":214},[208,3112,1194],{"class":218},[208,3114,256],{"class":214},[208,3116,3117,3119,3121,3123,3125,3127,3129],{"class":210,"line":283},[208,3118,267],{"class":232},[208,3120,237],{"class":218},[208,3122,240],{"class":214},[208,3124,1027],{"class":218},[208,3126,240],{"class":214},[208,3128,1032],{"class":218},[208,3130,256],{"class":214},[208,3132,3133,3135,3137,3139,3141,3143,3145],{"class":210,"line":303},[208,3134,267],{"class":232},[208,3136,237],{"class":218},[208,3138,240],{"class":214},[208,3140,1027],{"class":218},[208,3142,240],{"class":214},[208,3144,1227],{"class":218},[208,3146,256],{"class":214},[208,3148,3149,3151,3153,3155,3157,3159,3161,3163,3165],{"class":210,"line":308},[208,3150,267],{"class":232},[208,3152,288],{"class":218},[208,3154,240],{"class":214},[208,3156,243],{"class":218},[208,3158,240],{"class":214},[208,3160,248],{"class":218},[208,3162,240],{"class":214},[208,3164,1248],{"class":218},[208,3166,256],{"class":214},[208,3168,3169],{"class":210,"line":324},[208,3170,226],{"emptyLinePlaceholder":225},[208,3172,3173,3175,3177,3179],{"class":210,"line":330},[208,3174,312],{"class":311},[208,3176,1261],{"class":236},[208,3178,318],{"class":311},[208,3180,1266],{"class":236},[208,3182,3183],{"class":210,"line":341},[208,3184,327],{"class":214},[208,3186,3187],{"class":210,"line":346},[208,3188,548],{"class":349},[208,3190,3191,3193,3195,3197],{"class":210,"line":353},[208,3192,356],{"class":349},[208,3194,360],{"class":359},[208,3196,363],{"class":359},[208,3198,366],{"class":349},[208,3200,3201],{"class":210,"line":369},[208,3202,372],{"class":349},[208,3204,3205,3207,3209,3211,3213,3215,3217,3219,3221],{"class":210,"line":375},[208,3206,378],{"class":311},[208,3208,381],{"class":214},[208,3210,384],{"class":218},[208,3212,387],{"class":214},[208,3214,1301],{"class":236},[208,3216,393],{"class":214},[208,3218,312],{"class":232},[208,3220,1308],{"class":214},[208,3222,3223],{"class":349}," \u002F\u002F or \"App\\Models\\Team\"\n",[208,3225,3226],{"class":210,"line":400},[208,3227,873],{"class":218},[208,3229,3230],{"class":210,"line":561},[208,3231,350],{"class":349},[208,3233,3234],{"class":210,"line":599},[208,3235,3236],{"class":349},"     * Name of the relationship as it is defined on the Post model\n",[208,3238,3239],{"class":210,"line":604},[208,3240,372],{"class":349},[208,3242,3243,3245,3247,3249,3251,3253,3255,3257],{"class":210,"line":620},[208,3244,378],{"class":311},[208,3246,381],{"class":214},[208,3248,1337],{"class":218},[208,3250,387],{"class":214},[208,3252,1342],{"class":214},[208,3254,1345],{"class":646},[208,3256,643],{"class":214},[208,3258,256],{"class":214},[208,3260,3261],{"class":210,"line":626},[208,3262,226],{"emptyLinePlaceholder":225},[208,3264,3265],{"class":210,"line":661},[208,3266,350],{"class":349},[208,3268,3269,3271,3273,3275],{"class":210,"line":667},[208,3270,356],{"class":349},[208,3272,360],{"class":359},[208,3274,363],{"class":359},[208,3276,1368],{"class":349},[208,3278,3279],{"class":210,"line":1371},[208,3280,372],{"class":349},[208,3282,3283,3285,3287,3289,3291,3293,3295,3297],{"class":210,"line":1376},[208,3284,378],{"class":311},[208,3286,381],{"class":214},[208,3288,1383],{"class":218},[208,3290,387],{"class":214},[208,3292,1388],{"class":236},[208,3294,393],{"class":214},[208,3296,312],{"class":232},[208,3298,256],{"class":214},[208,3300,3301],{"class":210,"line":1397},[208,3302,226],{"emptyLinePlaceholder":225},[208,3304,3305],{"class":210,"line":1402},[208,3306,1405],{"class":349},[208,3308,3309,3311,3313,3315],{"class":210,"line":1408},[208,3310,356],{"class":349},[208,3312,360],{"class":359},[208,3314,363],{"class":359},[208,3316,1107],{"class":349},[208,3318,3319],{"class":210,"line":1419},[208,3320,372],{"class":349},[208,3322,3323,3325,3327,3329,3331,3333,3335,3337],{"class":210,"line":1424},[208,3324,378],{"class":311},[208,3326,381],{"class":214},[208,3328,1120],{"class":218},[208,3330,387],{"class":214},[208,3332,1125],{"class":236},[208,3334,393],{"class":214},[208,3336,312],{"class":232},[208,3338,256],{"class":214},[208,3340,3341],{"class":210,"line":1443},[208,3342,403],{"class":214},[152,3344,3346],{"id":3345},"validation","Validation",[1451,3348,3349],{},[156,3350,3351,3352,3355,3356,3358,3359,1486],{},"Request classes ",[959,3353,3354],{},"must"," extend ",[194,3357,1466],{}," class instead of ",[194,3360,1458],{},[156,3362,3363,3364,2241,3366,3368,3369,3373,3374,1486],{},"To validate incoming request data to ",[194,3365,1472],{},[194,3367,850],{}," endpoints, Orion will try to find ",[160,3370,3372],{"href":1479,"rel":3371},[164],"request class"," for resource model following the class name pattern:\n",[194,3375,1485],{},[156,3377,3378,3379,3381,3382,1486],{},"For example, if you have an ",[194,3380,1492],{}," model, the related request class would be ",[194,3383,1496],{},[156,3385,3386,3387,3389],{},"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,3388,1503],{}," property on controller to a fully-qualified request class name.",[199,3391,3392],{"className":201,"code":1507,"language":203,"meta":204,"style":204},[194,3393,3394,3400,3404,3424,3428,3444,3464,3468,3478,3482,3486,3496,3500,3518,3522,3526,3536,3540,3558],{"__ignoreMap":204},[208,3395,3396,3398],{"class":210,"line":211},[208,3397,215],{"class":214},[208,3399,219],{"class":218},[208,3401,3402],{"class":210,"line":222},[208,3403,226],{"emptyLinePlaceholder":225},[208,3405,3406,3408,3410,3412,3414,3416,3418,3420,3422],{"class":210,"line":229},[208,3407,233],{"class":232},[208,3409,237],{"class":236},[208,3411,240],{"class":214},[208,3413,243],{"class":236},[208,3415,240],{"class":214},[208,3417,248],{"class":236},[208,3419,240],{"class":214},[208,3421,253],{"class":236},[208,3423,256],{"class":214},[208,3425,3426],{"class":210,"line":259},[208,3427,226],{"emptyLinePlaceholder":225},[208,3429,3430,3432,3434,3436,3438,3440,3442],{"class":210,"line":264},[208,3431,267],{"class":232},[208,3433,237],{"class":218},[208,3435,240],{"class":214},[208,3437,94],{"class":218},[208,3439,240],{"class":214},[208,3441,1558],{"class":218},[208,3443,256],{"class":214},[208,3445,3446,3448,3450,3452,3454,3456,3458,3460,3462],{"class":210,"line":283},[208,3447,267],{"class":232},[208,3449,237],{"class":218},[208,3451,240],{"class":214},[208,3453,243],{"class":218},[208,3455,240],{"class":214},[208,3457,1575],{"class":218},[208,3459,240],{"class":214},[208,3461,1580],{"class":218},[208,3463,256],{"class":214},[208,3465,3466],{"class":210,"line":303},[208,3467,226],{"emptyLinePlaceholder":225},[208,3469,3470,3472,3474,3476],{"class":210,"line":308},[208,3471,312],{"class":311},[208,3473,1593],{"class":236},[208,3475,318],{"class":311},[208,3477,321],{"class":236},[208,3479,3480],{"class":210,"line":324},[208,3481,327],{"class":214},[208,3483,3484],{"class":210,"line":330},[208,3485,350],{"class":349},[208,3487,3488,3490,3492,3494],{"class":210,"line":341},[208,3489,356],{"class":349},[208,3491,360],{"class":359},[208,3493,363],{"class":359},[208,3495,366],{"class":349},[208,3497,3498],{"class":210,"line":346},[208,3499,372],{"class":349},[208,3501,3502,3504,3506,3508,3510,3512,3514,3516],{"class":210,"line":353},[208,3503,378],{"class":311},[208,3505,381],{"class":214},[208,3507,384],{"class":218},[208,3509,387],{"class":214},[208,3511,1632],{"class":236},[208,3513,393],{"class":214},[208,3515,312],{"class":232},[208,3517,256],{"class":214},[208,3519,3520],{"class":210,"line":369},[208,3521,226],{"emptyLinePlaceholder":225},[208,3523,3524],{"class":210,"line":375},[208,3525,350],{"class":349},[208,3527,3528,3530,3532,3534],{"class":210,"line":400},[208,3529,1651],{"class":349},[208,3531,360],{"class":359},[208,3533,363],{"class":359},[208,3535,1658],{"class":349},[208,3537,3538],{"class":210,"line":561},[208,3539,1663],{"class":349},[208,3541,3542,3544,3546,3548,3550,3552,3554,3556],{"class":210,"line":599},[208,3543,378],{"class":311},[208,3545,381],{"class":214},[208,3547,1672],{"class":218},[208,3549,387],{"class":214},[208,3551,1677],{"class":236},[208,3553,393],{"class":214},[208,3555,312],{"class":232},[208,3557,256],{"class":214},[208,3559,3560],{"class":210,"line":604},[208,3561,403],{"class":214},[156,3563,3564,3565,3569,3570,2241,3572,3574],{},"The request class is then bound using Laravel ",[160,3566,3568],{"href":1693,"rel":3567},[164],"Service Container"," and used in ",[194,3571,1472],{},[194,3573,850],{}," methods to validate request data the same way as if you would explicitly set it in method signature:",[199,3576,3577],{"className":201,"code":1704,"language":203,"meta":204,"style":204},[194,3578,3579,3597,3601,3605],{"__ignoreMap":204},[208,3580,3581,3583,3585,3587,3589,3591,3593,3595],{"class":210,"line":211},[208,3582,1711],{"class":311},[208,3584,610],{"class":311},[208,3586,1716],{"class":613},[208,3588,640],{"class":214},[208,3590,1580],{"class":236},[208,3592,381],{"class":214},[208,3594,1725],{"class":218},[208,3596,722],{"class":214},[208,3598,3599],{"class":210,"line":222},[208,3600,327],{"class":214},[208,3602,3603],{"class":210,"line":229},[208,3604,1736],{"class":214},[208,3606,3607],{"class":210,"line":259},[208,3608,403],{"class":214},[405,3610,3612],{"id":3611},"validation-rules","Validation Rules",[1746,3614,3616,3617,2241,3619,3621],{"id":3615},"defining-rules-for-store-and-update-operations","Defining rules for ",[194,3618,1472],{},[194,3620,850],{}," operations",[156,3623,3624,3625,3627],{},"Orion provides ",[194,3626,1466],{}," class with a handful of methods to specify validation rules.",[156,3629,3630,3631,2241,3633,3635,3636,3638,3639,2241,3641,3643],{},"To define common rules for both ",[194,3632,1472],{},[194,3634,850],{}," endpoints you can use ",[194,3637,1770],{}," method.\nIf you would like to define rules specific to an endpoint, you can use ",[194,3640,1774],{},[194,3642,1777],{}," methods.",[1451,3645,3646],{},[156,3647,3648,3649,2241,3651,3653,3654,3656],{},"Rules for a particular field specified in the ",[194,3650,1774],{},[194,3652,1777],{}," methods overwrite rules from the ",[194,3655,1770],{}," method, if both contain the same key.",[199,3658,3659],{"className":201,"code":1793,"language":203,"meta":204,"style":204},[194,3660,3661,3667,3671,3687,3691,3711,3715,3725,3729,3743,3747,3753,3769,3773,3777,3781,3795,3799,3805,3821,3825,3829],{"__ignoreMap":204},[208,3662,3663,3665],{"class":210,"line":211},[208,3664,215],{"class":214},[208,3666,219],{"class":218},[208,3668,3669],{"class":210,"line":222},[208,3670,226],{"emptyLinePlaceholder":225},[208,3672,3673,3675,3677,3679,3681,3683,3685],{"class":210,"line":229},[208,3674,233],{"class":232},[208,3676,237],{"class":236},[208,3678,240],{"class":214},[208,3680,243],{"class":236},[208,3682,240],{"class":214},[208,3684,1575],{"class":236},[208,3686,256],{"class":214},[208,3688,3689],{"class":210,"line":259},[208,3690,226],{"emptyLinePlaceholder":225},[208,3692,3693,3695,3697,3699,3701,3703,3705,3707,3709],{"class":210,"line":264},[208,3694,267],{"class":232},[208,3696,288],{"class":218},[208,3698,240],{"class":214},[208,3700,243],{"class":218},[208,3702,240],{"class":214},[208,3704,1575],{"class":218},[208,3706,240],{"class":214},[208,3708,1844],{"class":218},[208,3710,256],{"class":214},[208,3712,3713],{"class":210,"line":283},[208,3714,226],{"emptyLinePlaceholder":225},[208,3716,3717,3719,3721,3723],{"class":210,"line":303},[208,3718,312],{"class":311},[208,3720,1857],{"class":236},[208,3722,318],{"class":311},[208,3724,1862],{"class":236},[208,3726,3727],{"class":210,"line":308},[208,3728,327],{"class":214},[208,3730,3731,3733,3735,3737,3739,3741],{"class":210,"line":324},[208,3732,607],{"class":311},[208,3734,610],{"class":311},[208,3736,1875],{"class":613},[208,3738,1878],{"class":214},[208,3740,1881],{"class":214},[208,3742,1884],{"class":232},[208,3744,3745],{"class":210,"line":330},[208,3746,623],{"class":214},[208,3748,3749,3751],{"class":210,"line":341},[208,3750,629],{"class":569},[208,3752,1895],{"class":214},[208,3754,3755,3757,3759,3761,3763,3765,3767],{"class":210,"line":346},[208,3756,1900],{"class":214},[208,3758,1903],{"class":646},[208,3760,643],{"class":214},[208,3762,1908],{"class":214},[208,3764,1342],{"class":214},[208,3766,1913],{"class":646},[208,3768,1916],{"class":214},[208,3770,3771],{"class":210,"line":353},[208,3772,1921],{"class":214},[208,3774,3775],{"class":210,"line":369},[208,3776,664],{"class":214},[208,3778,3779],{"class":210,"line":375},[208,3780,226],{"emptyLinePlaceholder":225},[208,3782,3783,3785,3787,3789,3791,3793],{"class":210,"line":400},[208,3784,607],{"class":311},[208,3786,610],{"class":311},[208,3788,1938],{"class":613},[208,3790,1878],{"class":214},[208,3792,1881],{"class":214},[208,3794,1884],{"class":232},[208,3796,3797],{"class":210,"line":561},[208,3798,623],{"class":214},[208,3800,3801,3803],{"class":210,"line":599},[208,3802,629],{"class":569},[208,3804,1895],{"class":214},[208,3806,3807,3809,3811,3813,3815,3817,3819],{"class":210,"line":604},[208,3808,1900],{"class":214},[208,3810,1961],{"class":646},[208,3812,643],{"class":214},[208,3814,1908],{"class":214},[208,3816,1342],{"class":214},[208,3818,1970],{"class":646},[208,3820,1916],{"class":214},[208,3822,3823],{"class":210,"line":620},[208,3824,1921],{"class":214},[208,3826,3827],{"class":210,"line":626},[208,3828,664],{"class":214},[208,3830,3831],{"class":210,"line":661},[208,3832,403],{"class":214},[156,3834,3835,3836,3838,3839,2241,3841,3843,3844,3846,3847,3849,3850,3852,3853,3855,3856,3858],{},"In this example, when a request is made to the ",[194,3837,1472],{}," endpoint, both ",[194,3840,1903],{},[194,3842,1961],{}," fields will be required. However, when a request is made to the ",[194,3845,850],{}," endpoint, only the ",[194,3848,1903],{}," field would be required, because there are no other rules defined in the ",[194,3851,1777],{}," method and the ",[194,3854,1903],{}," field is marked as required in the ",[194,3857,1770],{}," method.",[1746,3860,3862],{"id":3861},"defining-rules-for-relation-specific-operations","Defining rules for relation-specific operations",[156,3864,3865,3866,2021,3868,2021,3870,2021,3872,2021,3874,2021,3876,1486],{},"You can also define rules for relation specific endpoints: ",[194,3867,2020],{},[194,3869,2024],{},[194,3871,2027],{},[194,3873,2030],{},[194,3875,2033],{},[194,3877,2036],{},[1451,3879,3880],{},[156,3881,3882,3883,3886,3887,3858],{},"Rules specified in these methods are ",[959,3884,3885],{},"NOT"," merged with rules from the ",[194,3888,1770],{},[1746,3890,3892],{"id":3891},"defining-rules-for-batch-operations","Defining rules for batch operations",[156,3894,3895,3896,2021,3898,1486],{},"You can also define rules for batch endpoints: ",[194,3897,2057],{},[194,3899,2060],{},[405,3901,3903],{"id":3902},"validation-messages","Validation Messages",[156,3905,3906],{},"Just like it is possible to configure the rules for specific endpoints, it is possible to customize their validation messages.",[1746,3908,3910,3911,2241,3913,3621],{"id":3909},"customizing-validation-messages-for-store-and-update-operations","Customizing validation messages for ",[194,3912,1472],{},[194,3914,850],{},[156,3916,3917,3918,2241,3920,3635,3922,3924,3925,2241,3927,3643],{},"To define common messages for both ",[194,3919,1472],{},[194,3921,850],{},[194,3923,2085],{}," method.\nIf you would like to define messages specific to an endpoint, you can use ",[194,3926,2089],{},[194,3928,2092],{},[1451,3930,3931],{},[156,3932,3933,3934,2241,3936,3938,3939,3656],{},"Messages for a particular field specified in the ",[194,3935,2089],{},[194,3937,2092],{}," methods overwrite messages from the ",[194,3940,2085],{},[1746,3942,3944],{"id":3943},"customizing-validation-messages-for-relation-specific-operations","Customizing validation messages for relation-specific operations",[156,3946,3947,3948,2021,3950,2021,3952,2021,3954,2021,3956,2021,3958,1486],{},"You can also customize messages for relation-specific endpoints: ",[194,3949,2114],{},[194,3951,2117],{},[194,3953,2120],{},[194,3955,2123],{},[194,3957,2126],{},[194,3959,2129],{},[1451,3961,3962],{},[156,3963,3964,3965,3967,3968,3858],{},"Messages specified in these methods are ",[959,3966,3885],{}," merged with messages from the ",[194,3969,2085],{},[1746,3971,3973],{"id":3972},"customizing-validation-messages-for-batch-operations","Customizing validation messages for batch operations",[156,3975,3976,3977,2021,3979,1486],{},"You can also customize messages for batch endpoints: ",[194,3978,2149],{},[194,3980,2152],{},[405,3982,3984],{"id":3983},"retrieving-request-data","Retrieving Request Data",[156,3986,3987,3988,3991,3992,3994],{},"By default, upon storing or updating entities, ",[678,3989,3990],{},"all"," request data is retrieved and passed into the ",[194,3993,2166],{}," method on a model.",[156,3996,3997,3998,4000,4001,2413,4003,4005],{},"However, it is possible to pass only the validated data. To do that, set ",[194,3999,2177],{}," to ",[194,4002,2181],{},[194,4004,2173],{}," config file.",[2184,4007,2186],{},{"title":204,"searchDepth":211,"depth":222,"links":4009},[4010,4011,4016],{"id":2217,"depth":222,"text":2218},{"id":2232,"depth":222,"text":2233,"children":4012},[4013,4014,4015],{"id":2400,"depth":229,"text":2401},{"id":2624,"depth":229,"text":2625},{"id":2872,"depth":229,"text":2873},{"id":3345,"depth":222,"text":3346,"children":4017},[4018,4019,4020],{"id":3611,"depth":229,"text":3612},{"id":3902,"depth":229,"text":3903},{"id":3983,"depth":229,"text":3984},"Learn about authentication, authorization, and validation.",{},"\u002Fguide\u002Fsecurity",{"title":118,"description":4021},"1.guide\u002F09.security","8sdxEJCwaW9yj_jBoHDgnTSInANQU1jYWBlCTH8coxU",1784394459987]