Set standalone attribute to 'auto' if new class syntax is used in module.xml

- 새로 추가된 클래스 문법 사용시 standalone 속성 기본값은 true가 아닌 auto로 지정

- standalone 속성의 의미는 아래와 같음
  - true: 항상 접근 허용 (기존 방식으로 선언한 액션의 기본값)
  - false: mid가 소속 모듈과 일치하거나, admin 모듈인 경우에만 접근 허용
  - auto: module 또는 mid가 소속 모듈과 일치하거나, admin 모듈인 경우에만 접근 허용
    (즉, false와 비슷하지만 exec_json 함수 등에서 module+act로 호출하는 경우에는
    mid가 없더라도 module만 일치하면 호출할 수 있도록 허용하여 개발 편의를 높임)

- 단, global_route 속성이 있는 경우 standalone 속성 기본값은 true임
  (전역 짧은주소는 mid 없이 호출될 수밖에 없으므로)
This commit is contained in:
Kijin Sung 2021-04-20 21:45:21 +09:00
parent f98964467c
commit 741a714abd
3 changed files with 38 additions and 9 deletions

View file

@ -16,6 +16,9 @@
<action name="procTestSubmitData" type="controller" standalone="false" check-csrf="false" ruleset="submitData" />
<action name="dispTestAdminIndex" type="view" admin_index="true" menu_name="test" menu_index="true" />
<action name="procTestAdminSubmitData" type="controller" permission="manager" check_var="module_srl" check_type="thisisatest" method="GET|POST" />
<action name="dispTestStandalone1" class="Namespace\ClassName" route="test/standalone1" method="GET" />
<action name="dispTestStandalone2" class="Namespace\ClassName" route="test/standalone2" method="GET" standalone="false" />
<action name="dispTestStandalone3" type="view" route="test/standalone3" method="GET" global-route="true" />
<action name="dispTestErrorHandler" type="view" standalone="true" error-handlers="404" />
</actions>
<menus>

View file

@ -35,8 +35,13 @@ class ModuleActionParserTest extends \Codeception\TestCase\Test
$this->assertEquals('GET|POST', $info->action->procTestAdminSubmitData->method);
$this->assertEquals([], $info->action->procTestAdminSubmitData->route);
// Standalone attribute
$this->assertEquals('auto', $info->action->dispTestStandalone1->standalone);
$this->assertEquals('false', $info->action->dispTestStandalone2->standalone);
$this->assertEquals('true', $info->action->dispTestStandalone3->standalone);
// Routes
$this->assertEquals(4, count($info->route->GET));
$this->assertEquals(7, count($info->route->GET));
$this->assertEquals('dispTestView', $info->route->GET['#^(?P<document_srl>[0-9]+)$#u']);
$this->assertEquals('dispTestView', $info->route->GET['#^(?P<document_srl>[0-9]+)/comment/(?P<comment_srl>[0-9]+)$#u']);
$this->assertEquals('dispTestView', $info->route->GET['#^(?P<document_srl>[0-9]+)/tag/(?P<tag>[a-zA-Z0-9_]+)$#u']);