Skip to content

Commit 82f9b7a

Browse files
authored
Merge pull request #103 from saeideng/named
AuthUser::hasAccess()
2 parents 8408b66 + 97ce7d0 commit 82f9b7a

File tree

2 files changed

+40
-14
lines changed

2 files changed

+40
-14
lines changed

src/View/Helper/AuthUserHelper.php

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,21 +45,19 @@ public function __construct(View $View, array $config = []) {
4545
*/
4646
public function hasAccess(array $url) {
4747
if (isset($url['_name'])) {
48+
//throw MissingRouteException if necessary
49+
Router::url($url);
4850
$routes = Router::getRouteCollection()->named();
49-
if (isset($routes[$url['_name']])) {
50-
$defaults = $routes[$url['_name']]->defaults;
51-
if (!isset($defaults['action']) || !isset($defaults['controller'])) {
52-
throw new Exception('Controller or action name could not be null.');
53-
}
54-
$url = [
55-
'prefix' => !empty($defaults['prefix']) ? $defaults['prefix'] : null,
56-
'plugin' => !empty($defaults['plugin']) ? $defaults['plugin'] : null,
57-
'controller' => $defaults['controller'],
58-
'action' => $defaults['action'],
59-
];
60-
} else {
61-
throw new MissingRouteException(['url' => $url['_name']]);
51+
$defaults = $routes[$url['_name']]->defaults;
52+
if (!isset($defaults['action']) || !isset($defaults['controller'])) {
53+
throw new Exception('Controller or action name could not be null.');
6254
}
55+
$url = [
56+
'prefix' => !empty($defaults['prefix']) ? $defaults['prefix'] : null,
57+
'plugin' => !empty($defaults['plugin']) ? $defaults['plugin'] : null,
58+
'controller' => $defaults['controller'],
59+
'action' => $defaults['action'],
60+
];
6361
} else {
6462
$params = $this->_View->getRequest()->getAttribute('params');
6563
$url += [

tests/TestCase/View/Helper/AuthUserHelperTest.php

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ public function testNamedRouteMissingControllerActionException() {
162162
$request = ['_name' => 'Tags::edit'];
163163
$this->expectException(Exception::class);
164164
$this->expectExceptionMessage('Controller or action name could not be null.');
165-
$result = $this->AuthUserHelper->hasAccess($request);
165+
$this->AuthUserHelper->hasAccess($request);
166166
}
167167

168168
/**
@@ -190,6 +190,34 @@ public function testInvalidNamedRouteException() {
190190
$this->AuthUserHelper->hasAccess($request);
191191
}
192192

193+
/**
194+
* Test that using incomplete names causes exceptions.
195+
*
196+
* @return void
197+
*/
198+
public function testIncompleteNamedRouteException() {
199+
$user = [
200+
'id' => 1,
201+
'role_id' => 1
202+
];
203+
$this->View->set('_authUser', $user);
204+
205+
Router::connect(
206+
'/view/{id}',
207+
['controller' =>'Posts', 'action' => 'view'],
208+
['_name' => 'Posts::view']
209+
);
210+
211+
$request = ['_name' => 'Posts::view', 'id' => 1];
212+
$result = $this->AuthUserHelper->hasAccess($request);
213+
$this->assertTrue($result);
214+
215+
$this->expectException(MissingRouteException::class);
216+
$request = ['_name' => 'Posts::view'];//missing id
217+
218+
$this->AuthUserHelper->hasAccess($request);
219+
}
220+
193221
/**
194222
* @return void
195223
*/

0 commit comments

Comments
 (0)