1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-03-21 08:00:46 +01:00

Merge branch '3.3.x'

This commit is contained in:
Marc Alexander 2020-08-12 21:47:12 +02:00
commit aae367e394
No known key found for this signature in database
GPG Key ID: 50E0D2423696F995
2 changed files with 48 additions and 35 deletions

View File

@ -240,6 +240,25 @@ class permission implements \phpbb\db\migration\tool\tool_interface
$this->auth->acl_clear_prefetch();
}
/**
* Check if a permission role exists
*
* @param string $role_name The role name
*
* @return int The id of the role if it exists, 0 otherwise
*/
public function role_exists($role_name)
{
$sql = 'SELECT role_id
FROM ' . ACL_ROLES_TABLE . "
WHERE role_name = '" . $this->db->sql_escape($role_name) . "'";
$result = $this->db->sql_query($sql);
$role_id = (int) $this->db->sql_fetchfield('role_id');
$this->db->sql_freeresult($result);
return $role_id;
}
/**
* Add a new permission role
*
@ -251,13 +270,7 @@ class permission implements \phpbb\db\migration\tool\tool_interface
*/
public function role_add($role_name, $role_type, $role_description = '')
{
$sql = 'SELECT role_id
FROM ' . ACL_ROLES_TABLE . "
WHERE role_name = '" . $this->db->sql_escape($role_name) . "'";
$this->db->sql_query($sql);
$role_id = (int) $this->db->sql_fetchfield('role_id');
if ($role_id)
if ($this->role_exists($role_name))
{
return;
}
@ -290,13 +303,7 @@ class permission implements \phpbb\db\migration\tool\tool_interface
*/
public function role_update($old_role_name, $new_role_name)
{
$sql = 'SELECT role_id
FROM ' . ACL_ROLES_TABLE . "
WHERE role_name = '" . $this->db->sql_escape($old_role_name) . "'";
$this->db->sql_query($sql);
$role_id = (int) $this->db->sql_fetchfield('role_id');
if (!$role_id)
if (!$this->role_exists($old_role_name))
{
throw new \phpbb\db\migration\exception('ROLE_NOT_EXIST', $old_role_name);
}
@ -315,13 +322,7 @@ class permission implements \phpbb\db\migration\tool\tool_interface
*/
public function role_remove($role_name)
{
$sql = 'SELECT role_id
FROM ' . ACL_ROLES_TABLE . "
WHERE role_name = '" . $this->db->sql_escape($role_name) . "'";
$this->db->sql_query($sql);
$role_id = (int) $this->db->sql_fetchfield('role_id');
if (!$role_id)
if (!($role_id = $this->role_exists($role_name)))
{
return;
}
@ -381,13 +382,7 @@ class permission implements \phpbb\db\migration\tool\tool_interface
switch ($type)
{
case 'role':
$sql = 'SELECT role_id
FROM ' . ACL_ROLES_TABLE . "
WHERE role_name = '" . $this->db->sql_escape($name) . "'";
$this->db->sql_query($sql);
$role_id = (int) $this->db->sql_fetchfield('role_id');
if (!$role_id)
if (!($role_id = $this->role_exists($name)))
{
throw new \phpbb\db\migration\exception('ROLE_NOT_EXIST', $name);
}
@ -539,13 +534,7 @@ class permission implements \phpbb\db\migration\tool\tool_interface
switch ($type)
{
case 'role':
$sql = 'SELECT role_id
FROM ' . ACL_ROLES_TABLE . "
WHERE role_name = '" . $this->db->sql_escape($name) . "'";
$this->db->sql_query($sql);
$role_id = (int) $this->db->sql_fetchfield('role_id');
if (!$role_id)
if (!($role_id = $this->role_exists($name)))
{
throw new \phpbb\db\migration\exception('ROLE_NOT_EXIST', $name);
}

View File

@ -13,6 +13,12 @@
class phpbb_dbal_migrator_tool_permission_test extends phpbb_database_test_case
{
/** @var \phpbb\auth\auth */
protected $auth;
/** @var \phpbb\db\migration\tool\permission */
protected $tool;
public $group_ids = array(
'REGISTERED' => 2,
'GLOBAL_MODERATORS' => 4,
@ -218,4 +224,22 @@ class phpbb_dbal_migrator_tool_permission_test extends phpbb_database_test_case
break;
}
}
public function data_test_permission_role_exists()
{
return array(
array('ROLE_MOD_FULL', true),
array('ROLE_USER_FULL', true),
array('ROLE_ADMIN_STANDARD', true),
array('ROLE_DOES_NOT_EXIST', false),
);
}
/**
* @dataProvider data_test_permission_role_exists
*/
public function test_permission_role_exists($role_name, $expected)
{
$this->assertEquals($expected, $this->tool->role_exists($role_name));
}
}