Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
project
drupal
Commits
0f480b9e
Commit
0f480b9e
authored
Jun 12, 2013
by
Nathaniel Catchpole
Browse files
Issue
#2012916
by andypost: Implement access controller for the menu and menu link entity.
parent
a5343cbe
Changes
12
Hide whitespace changes
Inline
Side-by-side
core/modules/menu/lib/Drupal/menu/Access/DeleteLinkAccessCheck.php
deleted
100644 → 0
View file @
a5343cbe
<?php
/**
* @file
* Contains \Drupal\menu\Access\DeleteLinkAccessCheck.
*/
namespace
Drupal\menu\Access
;
use
Drupal\Core\Access\AccessCheckInterface
;
use
Symfony\Component\Routing\Route
;
use
Symfony\Component\HttpFoundation\Request
;
/**
* Access check for menu link delete routes.
*/
class
DeleteLinkAccessCheck
implements
AccessCheckInterface
{
/**
* {@inheritdoc}
*/
public
function
applies
(
Route
$route
)
{
return
array_key_exists
(
'_access_menu_delete_link'
,
$route
->
getRequirements
());
}
/**
* {@inheritdoc}
*/
public
function
access
(
Route
$route
,
Request
$request
)
{
if
(
user_access
(
'administer menu'
)
&&
$menu_link
=
$request
->
attributes
->
get
(
'menu_link'
))
{
// Links defined via hook_menu may not be deleted. Updated items are an
// exception, as they can be broken.
return
$menu_link
->
module
!==
'system'
||
$menu_link
->
updated
;
}
return
FALSE
;
}
}
core/modules/menu/lib/Drupal/menu/Access/DeleteMenuAccessCheck.php
deleted
100644 → 0
View file @
a5343cbe
<?php
/**
* @file
* Contains \Drupal\menu\Access\DeleteMenuAccessCheck.
*/
namespace
Drupal\menu\Access
;
use
Drupal\Core\Access\AccessCheckInterface
;
use
Symfony\Component\Routing\Route
;
use
Symfony\Component\HttpFoundation\Request
;
/**
* Access check for menu delete routes.
*/
class
DeleteMenuAccessCheck
implements
AccessCheckInterface
{
/**
* {@inheritdoc}
*/
public
function
applies
(
Route
$route
)
{
return
array_key_exists
(
'_access_menu_delete_menu'
,
$route
->
getRequirements
());
}
/**
* {@inheritdoc}
*/
public
function
access
(
Route
$route
,
Request
$request
)
{
if
(
user_access
(
'administer menu'
)
&&
$menu
=
$request
->
attributes
->
get
(
'menu'
))
{
// System-defined menus may not be deleted.
$system_menus
=
menu_list_system_menus
();
return
!
isset
(
$system_menus
[
$menu
->
id
()]);
}
return
FALSE
;
}
}
core/modules/menu/lib/Drupal/menu/MenuFormController.php
View file @
0f480b9e
...
...
@@ -71,10 +71,8 @@ public function form(array $form, array &$form_state) {
*/
protected
function
actions
(
array
$form
,
array
&
$form_state
)
{
$actions
=
parent
::
actions
(
$form
,
$form_state
);
$menu
=
$this
->
entity
;
$system_menus
=
menu_list_system_menus
();
$actions
[
'delete'
][
'#access'
]
=
!
$menu
->
isNew
()
&&
!
isset
(
$system_menus
[
$menu
->
id
()]);
$actions
[
'delete'
][
'#access'
]
=
!
$this
->
entity
->
isNew
()
&&
$this
->
entity
->
access
(
'delete'
);
return
$actions
;
}
...
...
@@ -114,8 +112,7 @@ public function save(array $form, array &$form_state) {
* Overrides Drupal\Core\Entity\EntityFormController::delete().
*/
public
function
delete
(
array
$form
,
array
&
$form_state
)
{
$menu
=
$this
->
entity
;
$form_state
[
'redirect'
]
=
'admin/structure/menu/manage/'
.
$menu
->
id
()
.
'/delete'
;
$form_state
[
'redirect'
]
=
'admin/structure/menu/manage/'
.
$this
->
entity
->
id
()
.
'/delete'
;
}
}
core/modules/menu/lib/Drupal/menu/MenuListController.php
View file @
0f480b9e
...
...
@@ -55,13 +55,11 @@ public function getOperations(EntityInterface $entity) {
'options'
=>
$uri
[
'options'
],
'weight'
=>
20
,
);
// System menus could not be deleted.
$system_menus
=
menu_list_system_menus
();
if
(
isset
(
$system_menus
[
$entity
->
id
()]))
{
unset
(
$operations
[
'delete'
]);
if
(
$entity
->
access
(
'delete'
))
{
$operations
[
'delete'
][
'title'
]
=
t
(
'Delete menu'
);
}
else
{
$operations
[
'delete'
]
[
'title'
]
=
t
(
'Delete menu'
);
unset
(
$operations
[
'delete'
]);
}
return
$operations
;
}
...
...
core/modules/menu/menu.admin.inc
View file @
0f480b9e
...
...
@@ -125,7 +125,6 @@ function menu_overview_form($form, &$form_state) {
function
_menu_overview_tree_form
(
$tree
,
$delta
=
50
)
{
$form
=
&
drupal_static
(
__FUNCTION__
,
array
(
'#tree'
=>
TRUE
));
foreach
(
$tree
as
$data
)
{
$title
=
''
;
$item
=
$data
[
'link'
];
// Don't show callbacks; these have $item['hidden'] < 0.
if
(
$item
&&
$item
[
'hidden'
]
>=
0
)
{
...
...
core/modules/menu/menu.routing.yml
View file @
0f480b9e
...
...
@@ -17,11 +17,11 @@ menu_link_delete:
defaults
:
_form
:
'
\Drupal\menu\Form\MenuLinkDeleteForm'
requirements
:
_access
_
menu_delete
_link
:
'
TRUE'
_entity
_access
:
menu_
link.
delete
menu_delete_menu
:
pattern
:
'
admin/structure/menu/manage/{menu}/delete'
defaults
:
_form
:
'
\Drupal\menu\Form\MenuDeleteMenuForm'
requirements
:
_access
_
menu
_
delete
_menu
:
'
TRUE'
_entity
_access
:
menu
.
delete
core/modules/menu/menu.services.yml
deleted
100644 → 0
View file @
a5343cbe
services
:
access_check.menu.delete_link
:
class
:
Drupal\menu\Access\DeleteLinkAccessCheck
tags
:
-
{
name
:
access_check
}
access_check.menu.delete_menu
:
class
:
Drupal\menu\Access\DeleteMenuAccessCheck
tags
:
-
{
name
:
access_check
}
core/modules/menu_link/lib/Drupal/menu_link/MenuLinkAccessController.php
0 → 100644
View file @
0f480b9e
<?php
/**
* @file
* Contains \Drupal\menu_link\MenuLinkAccessController.
*/
namespace
Drupal\menu_link
;
use
Drupal\Core\Entity\EntityAccessController
;
use
Drupal\Core\Entity\EntityInterface
;
use
Drupal\user\Plugin\Core\Entity\User
;
/**
* Defines an access controller for the menu link entity.
*
* @see \Drupal\menu_link\Plugin\Core\Entity\MenuLink
*/
class
MenuLinkAccessController
extends
EntityAccessController
{
/**
* {@inheritdoc}
*/
protected
function
checkAccess
(
EntityInterface
$entity
,
$operation
,
$langcode
,
User
$account
)
{
$access
=
user_access
(
'administer menu'
,
$account
);
if
(
$access
&&
$operation
==
'delete'
)
{
// Only items created by the menu module can be deleted.
return
$entity
->
module
==
'menu'
;
}
return
$access
;
}
}
core/modules/menu_link/lib/Drupal/menu_link/MenuLinkFormController.php
View file @
0f480b9e
...
...
@@ -172,7 +172,7 @@ public function form(array $form, array &$form_state) {
protected
function
actions
(
array
$form
,
array
&
$form_state
)
{
$element
=
parent
::
actions
(
$form
,
$form_state
);
$element
[
'submit'
][
'#button_type'
]
=
'primary'
;
$element
[
'delete'
][
'#access'
]
=
$this
->
entity
->
module
==
'menu'
;
$element
[
'delete'
][
'#access'
]
=
$this
->
entity
->
access
(
'delete'
)
;
return
$element
;
}
...
...
core/modules/menu_link/lib/Drupal/menu_link/Plugin/Core/Entity/MenuLink.php
View file @
0f480b9e
...
...
@@ -24,6 +24,7 @@
* module = "menu_link",
* controllers = {
* "storage" = "Drupal\menu_link\MenuLinkStorageController",
* "access" = "Drupal\menu_link\MenuLinkAccessController",
* "render" = "Drupal\Core\Entity\EntityRenderController",
* "form" = {
* "default" = "Drupal\menu_link\MenuLinkFormController"
...
...
core/modules/system/lib/Drupal/system/MenuAccessController.php
0 → 100644
View file @
0f480b9e
<?php
/**
* @file
* Contains \Drupal\system\MenuAccessController.
*/
namespace
Drupal\system
;
use
Drupal\Core\Entity\EntityAccessController
;
use
Drupal\Core\Entity\EntityInterface
;
use
Drupal\user\Plugin\Core\Entity\User
;
/**
* Defines an access controller for the menu entity.
*
* @see \Drupal\system\Plugin\Core\Entity\Menu
*/
class
MenuAccessController
extends
EntityAccessController
{
/**
* {@inheritdoc}
*/
protected
function
checkAccess
(
EntityInterface
$entity
,
$operation
,
$langcode
,
User
$account
)
{
if
(
$operation
==
'delete'
)
{
// System-defined menus may not be deleted.
// @todo Refactor https://drupal.org/node/1882552
$system_menus
=
menu_list_system_menus
();
return
!
isset
(
$system_menus
[
$entity
->
id
()]);
}
return
user_access
(
'administer menu'
,
$account
);
}
}
core/modules/system/lib/Drupal/system/Plugin/Core/Entity/Menu.php
View file @
0f480b9e
...
...
@@ -20,7 +20,8 @@
* label = @Translation("Menu"),
* module = "system",
* controllers = {
* "storage" = "Drupal\Core\Config\Entity\ConfigStorageController"
* "storage" = "Drupal\Core\Config\Entity\ConfigStorageController",
* "access" = "Drupal\system\MenuAccessController"
* },
* config_prefix = "menu.menu",
* entity_keys = {
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment