mirror of
https://github.com/phpbb/phpbb.git
synced 2025-05-11 18:15:20 +02:00
336 lines
15 KiB
PHP
336 lines
15 KiB
PHP
<?php
|
|
/**
|
|
*
|
|
* @package phpBB3
|
|
* @copyright (c) 2013 phpBB Group
|
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* DO NOT CHANGE
|
|
*/
|
|
if (!defined('IN_PHPBB'))
|
|
{
|
|
exit;
|
|
}
|
|
|
|
class phpbb_permissions
|
|
{
|
|
/**
|
|
* Event dispatcher object
|
|
* @var phpbb_event_dispatcher
|
|
*/
|
|
protected $dispatcher;
|
|
|
|
/**
|
|
* User object
|
|
* @var phpbb_user
|
|
*/
|
|
protected $user;
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @param phpbb_event_dispatcher $phpbb_dispatcher Event dispatcher
|
|
* @param phpbb_user $user User Object
|
|
* @return null
|
|
*/
|
|
public function __construct(phpbb_event_dispatcher $phpbb_dispatcher, phpbb_user $user)
|
|
{
|
|
$this->dispatcher = $phpbb_dispatcher;
|
|
$this->user = $user;
|
|
|
|
$categories = $this->categories;
|
|
$types = $this->types;
|
|
$permissions = $this->permissions;
|
|
|
|
/**
|
|
* Allows to specify additional permission categories, types and permissions
|
|
*
|
|
* @event core.permissions
|
|
* @var array types Array with permission types (a_, u_, m_, etc.)
|
|
* @var array categories Array with permission categories (pm, post, settings, misc, etc.)
|
|
* @var array permissions Array with permissions. Each Permission has the following layout:
|
|
* 'acl_<type><permission>' => array(
|
|
* 'lang' => 'Language Key with a Short description', // Optional, if not set,
|
|
* // the permissions identifier 'acl_<type><permission>' is used with
|
|
* // all uppercase.
|
|
* 'cat' => 'Identifier of the category, the permission should be displayed in',
|
|
* ),
|
|
* Example:
|
|
* 'acl_u_viewprofile' => array(
|
|
* 'lang' => 'ACL_U_VIEWPROFILE',
|
|
* 'cat' => 'profile',
|
|
* ),
|
|
* @since 3.1-A1
|
|
*/
|
|
$vars = array('types', 'categories', 'permissions');
|
|
extract($phpbb_dispatcher->trigger_event('core.permissions', $vars));
|
|
|
|
$this->categories = $categories;
|
|
$this->types = $types;
|
|
$this->permissions = $permissions;
|
|
}
|
|
|
|
/**
|
|
* Returns an array with all the permission categories (pm, post, settings, misc, etc.)
|
|
*
|
|
* @return array Layout: cat-identifier => Language key
|
|
*/
|
|
public function get_categories()
|
|
{
|
|
return $this->categories;
|
|
}
|
|
|
|
/**
|
|
* Returns the language string of a permission category
|
|
*
|
|
* @return string Language string
|
|
*/
|
|
public function get_category_lang($category)
|
|
{
|
|
return $this->user->lang($this->categories[$category]);
|
|
}
|
|
|
|
/**
|
|
* Returns an array with all the permission types (a_, u_, m_, etc.)
|
|
*
|
|
* @return array Layout: type-identifier => Language key
|
|
*/
|
|
public function get_types()
|
|
{
|
|
return $this->types;
|
|
}
|
|
|
|
/**
|
|
* Returns the language string of a permission type
|
|
*
|
|
* @return string Language string
|
|
*/
|
|
public function get_type_lang($type, $scope = false)
|
|
{
|
|
if ($scope && isset($this->types[$scope][$type]))
|
|
{
|
|
$lang_key = $this->types[$scope][$type];
|
|
}
|
|
else if (isset($this->types[$type]))
|
|
{
|
|
$lang_key = $this->types[$type];
|
|
}
|
|
else
|
|
{
|
|
$lang_key = 'ACL_TYPE_' . strtoupper(($scope) ? $scope . '_' . $type : $type);
|
|
}
|
|
|
|
return $this->user->lang($lang_key);
|
|
}
|
|
|
|
/**
|
|
* Returns an array with all the permissions.
|
|
* Each Permission has the following layout:
|
|
* 'acl_<type><permission>' => array(
|
|
* 'lang' => 'Language Key with a Short description', // Optional, if not set,
|
|
* // the permissions identifier 'acl_<type><permission>' is used with
|
|
* // all uppercase.
|
|
* 'cat' => 'Identifier of the category, the permission should be displayed in',
|
|
* ),
|
|
* Example:
|
|
* 'acl_u_viewprofile' => array(
|
|
* 'lang' => 'ACL_U_VIEWPROFILE',
|
|
* 'cat' => 'profile',
|
|
* ),
|
|
*
|
|
* @return array
|
|
*/
|
|
public function get_permissions()
|
|
{
|
|
return $this->permissions;
|
|
}
|
|
|
|
/**
|
|
* Returns the category of a permission
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_permission_category($permission)
|
|
{
|
|
return (isset($this->permissions[$permission]['cat'])) ? $this->permissions[$permission]['cat'] : 'misc';
|
|
}
|
|
|
|
/**
|
|
* Returns the language string of a permission
|
|
*
|
|
* @return string Language string
|
|
*/
|
|
public function get_permission_lang($permission)
|
|
{
|
|
return (isset($this->permissions['acl_' . $permission]['lang'])) ? $this->user->lang($this->permissions['acl_' . $permission]['lang']) : $this->user->lang('ACL_' . strtoupper($permission));
|
|
}
|
|
|
|
protected $types = array(
|
|
'u_' => 'ACL_TYPE_U_',
|
|
'a_' => 'ACL_TYPE_A_',
|
|
'm_' => 'ACL_TYPE_M_',
|
|
'f_' => 'ACL_TYPE_F_',
|
|
'global' => array(
|
|
'm_' => 'ACL_TYPE_GLOBAL_M_',
|
|
),
|
|
);
|
|
|
|
protected $categories = array(
|
|
'actions' => 'ACL_CAT_ACTIONS',
|
|
'content' => 'ACL_CAT_CONTENT',
|
|
'forums' => 'ACL_CAT_FORUMS',
|
|
'misc' => 'ACL_CAT_MISC',
|
|
'permissions' => 'ACL_CAT_PERMISSIONS',
|
|
'pm' => 'ACL_CAT_PM',
|
|
'polls' => 'ACL_CAT_POLLS',
|
|
'post' => 'ACL_CAT_POST',
|
|
'post_actions' => 'ACL_CAT_POST_ACTIONS',
|
|
'posting' => 'ACL_CAT_POSTING',
|
|
'profile' => 'ACL_CAT_PROFILE',
|
|
'settings' => 'ACL_CAT_SETTINGS',
|
|
'topic_actions' => 'ACL_CAT_TOPIC_ACTIONS',
|
|
'user_group' => 'ACL_CAT_USER_GROUP',
|
|
);
|
|
|
|
protected $permissions = array(
|
|
// User Permissions
|
|
'acl_u_viewprofile' => array('lang' => 'Can view profiles, memberlist and online list', 'cat' => 'profile'),
|
|
'acl_u_chgname' => array('lang' => 'Can change username', 'cat' => 'profile'),
|
|
'acl_u_chgpasswd' => array('lang' => 'Can change password', 'cat' => 'profile'),
|
|
'acl_u_chgemail' => array('lang' => 'Can change email address', 'cat' => 'profile'),
|
|
'acl_u_chgavatar' => array('lang' => 'Can change avatar', 'cat' => 'profile'),
|
|
'acl_u_chggrp' => array('lang' => 'Can change default usergroup', 'cat' => 'profile'),
|
|
'acl_u_chgprofileinfo' => array('lang' => 'Can change profile field information', 'cat' => 'profile'),
|
|
|
|
'acl_u_attach' => array('lang' => 'Can attach files', 'cat' => 'post'),
|
|
'acl_u_download' => array('lang' => 'Can download files', 'cat' => 'post'),
|
|
'acl_u_savedrafts' => array('lang' => 'Can save drafts', 'cat' => 'post'),
|
|
'acl_u_chgcensors' => array('lang' => 'Can disable word censors', 'cat' => 'post'),
|
|
'acl_u_sig' => array('lang' => 'Can use signature', 'cat' => 'post'),
|
|
|
|
'acl_u_sendpm' => array('lang' => 'Can send private messages', 'cat' => 'pm'),
|
|
'acl_u_masspm' => array('lang' => 'Can send messages to multiple users', 'cat' => 'pm'),
|
|
'acl_u_masspm_group'=> array('lang' => 'Can send messages to groups', 'cat' => 'pm'),
|
|
'acl_u_readpm' => array('lang' => 'Can read private messages', 'cat' => 'pm'),
|
|
'acl_u_pm_edit' => array('lang' => 'Can edit own private messages', 'cat' => 'pm'),
|
|
'acl_u_pm_delete' => array('lang' => 'Can remove private messages from own folder', 'cat' => 'pm'),
|
|
'acl_u_pm_forward' => array('lang' => 'Can forward private messages', 'cat' => 'pm'),
|
|
'acl_u_pm_emailpm' => array('lang' => 'Can email private messages', 'cat' => 'pm'),
|
|
'acl_u_pm_printpm' => array('lang' => 'Can print private messages', 'cat' => 'pm'),
|
|
'acl_u_pm_attach' => array('lang' => 'Can attach files in private messages', 'cat' => 'pm'),
|
|
'acl_u_pm_download' => array('lang' => 'Can download files in private messages', 'cat' => 'pm'),
|
|
'acl_u_pm_bbcode' => array('lang' => 'Can use BBCode in private messages', 'cat' => 'pm'),
|
|
'acl_u_pm_smilies' => array('lang' => 'Can use smilies in private messages', 'cat' => 'pm'),
|
|
'acl_u_pm_img' => array('lang' => 'Can use [img] BBCode tag in private messages', 'cat' => 'pm'),
|
|
'acl_u_pm_flash' => array('lang' => 'Can use [flash] BBCode tag in private messages', 'cat' => 'pm'),
|
|
|
|
'acl_u_sendemail' => array('lang' => 'Can send emails', 'cat' => 'misc'),
|
|
'acl_u_sendim' => array('lang' => 'Can send instant messages', 'cat' => 'misc'),
|
|
'acl_u_ignoreflood' => array('lang' => 'Can ignore flood limit', 'cat' => 'misc'),
|
|
'acl_u_hideonline' => array('lang' => 'Can hide online status', 'cat' => 'misc'),
|
|
'acl_u_viewonline' => array('lang' => 'Can view hidden online users', 'cat' => 'misc'),
|
|
'acl_u_search' => array('lang' => 'Can search board', 'cat' => 'misc'),
|
|
|
|
// Forum Permissions
|
|
'acl_f_list' => array('lang' => 'Can see forum', 'cat' => 'actions'),
|
|
'acl_f_read' => array('lang' => 'Can read forum', 'cat' => 'actions'),
|
|
'acl_f_search' => array('lang' => 'Can search the forum', 'cat' => 'actions'),
|
|
'acl_f_subscribe' => array('lang' => 'Can subscribe forum', 'cat' => 'actions'),
|
|
'acl_f_print' => array('lang' => 'Can print topics', 'cat' => 'actions'),
|
|
'acl_f_email' => array('lang' => 'Can email topics', 'cat' => 'actions'),
|
|
'acl_f_bump' => array('lang' => 'Can bump topics', 'cat' => 'actions'),
|
|
'acl_f_user_lock' => array('lang' => 'Can lock own topics', 'cat' => 'actions'),
|
|
'acl_f_download' => array('lang' => 'Can download files', 'cat' => 'actions'),
|
|
'acl_f_report' => array('lang' => 'Can report posts', 'cat' => 'actions'),
|
|
|
|
'acl_f_post' => array('lang' => 'Can start new topics', 'cat' => 'post'),
|
|
'acl_f_sticky' => array('lang' => 'Can post stickies', 'cat' => 'post'),
|
|
'acl_f_announce' => array('lang' => 'Can post announcements', 'cat' => 'post'),
|
|
'acl_f_reply' => array('lang' => 'Can reply to topics', 'cat' => 'post'),
|
|
'acl_f_edit' => array('lang' => 'Can edit own posts', 'cat' => 'post'),
|
|
'acl_f_delete' => array('lang' => 'Can delete own posts', 'cat' => 'post'),
|
|
'acl_f_ignoreflood' => array('lang' => 'Can ignore flood limit', 'cat' => 'post'),
|
|
'acl_f_postcount' => array('lang' => 'Increment post counter<br /><em>Please note that this setting only affects new posts.</em>', 'cat' => 'post'),
|
|
'acl_f_noapprove' => array('lang' => 'Can post without approval', 'cat' => 'post'),
|
|
|
|
'acl_f_attach' => array('lang' => 'Can attach files', 'cat' => 'content'),
|
|
'acl_f_icons' => array('lang' => 'Can use topic/post icons', 'cat' => 'content'),
|
|
'acl_f_bbcode' => array('lang' => 'Can use BBCode', 'cat' => 'content'),
|
|
'acl_f_flash' => array('lang' => 'Can use [flash] BBCode tag', 'cat' => 'content'),
|
|
'acl_f_img' => array('lang' => 'Can use [img] BBCode tag', 'cat' => 'content'),
|
|
'acl_f_sigs' => array('lang' => 'Can use signatures', 'cat' => 'content'),
|
|
'acl_f_smilies' => array('lang' => 'Can use smilies', 'cat' => 'content'),
|
|
|
|
'acl_f_poll' => array('lang' => 'Can create polls', 'cat' => 'polls'),
|
|
'acl_f_vote' => array('lang' => 'Can vote in polls', 'cat' => 'polls'),
|
|
'acl_f_votechg' => array('lang' => 'Can change existing vote', 'cat' => 'polls'),
|
|
|
|
// Moderator Permissions
|
|
'acl_m_edit' => array('lang' => 'Can edit posts', 'cat' => 'post_actions'),
|
|
'acl_m_delete' => array('lang' => 'Can delete posts', 'cat' => 'post_actions'),
|
|
'acl_m_approve' => array('lang' => 'Can approve posts', 'cat' => 'post_actions'),
|
|
'acl_m_report' => array('lang' => 'Can close and delete reports', 'cat' => 'post_actions'),
|
|
'acl_m_chgposter' => array('lang' => 'Can change post author', 'cat' => 'post_actions'),
|
|
|
|
'acl_m_move' => array('lang' => 'Can move topics', 'cat' => 'topic_actions'),
|
|
'acl_m_lock' => array('lang' => 'Can lock topics', 'cat' => 'topic_actions'),
|
|
'acl_m_split' => array('lang' => 'Can split topics', 'cat' => 'topic_actions'),
|
|
'acl_m_merge' => array('lang' => 'Can merge topics', 'cat' => 'topic_actions'),
|
|
|
|
'acl_m_info' => array('lang' => 'Can view post details', 'cat' => 'misc'),
|
|
'acl_m_warn' => array('lang' => 'Can issue warnings<br /><em>This setting is only assigned globally. It is not forum based.</em>', 'cat' => 'misc'), // This moderator setting is only global (and not local)
|
|
'acl_m_ban' => array('lang' => 'Can manage bans<br /><em>This setting is only assigned globally. It is not forum based.</em>', 'cat' => 'misc'), // This moderator setting is only global (and not local)
|
|
|
|
// Admin Permissions
|
|
'acl_a_board' => array('lang' => 'Can alter board settings/check for updates', 'cat' => 'settings'),
|
|
'acl_a_server' => array('lang' => 'Can alter server/communication settings', 'cat' => 'settings'),
|
|
'acl_a_jabber' => array('lang' => 'Can alter Jabber settings', 'cat' => 'settings'),
|
|
'acl_a_phpinfo' => array('lang' => 'Can view php settings', 'cat' => 'settings'),
|
|
|
|
'acl_a_forum' => array('lang' => 'Can manage forums', 'cat' => 'forums'),
|
|
'acl_a_forumadd' => array('lang' => 'Can add new forums', 'cat' => 'forums'),
|
|
'acl_a_forumdel' => array('lang' => 'Can delete forums', 'cat' => 'forums'),
|
|
'acl_a_prune' => array('lang' => 'Can prune forums', 'cat' => 'forums'),
|
|
|
|
'acl_a_icons' => array('lang' => 'Can alter topic/post icons and smilies', 'cat' => 'posting'),
|
|
'acl_a_words' => array('lang' => 'Can alter word censors', 'cat' => 'posting'),
|
|
'acl_a_bbcode' => array('lang' => 'Can define BBCode tags', 'cat' => 'posting'),
|
|
'acl_a_attach' => array('lang' => 'Can alter attachment related settings', 'cat' => 'posting'),
|
|
|
|
'acl_a_user' => array('lang' => 'Can manage users<br /><em>This also includes seeing the users browser agent within the viewonline list.</em>', 'cat' => 'user_group'),
|
|
'acl_a_userdel' => array('lang' => 'Can delete/prune users', 'cat' => 'user_group'),
|
|
'acl_a_group' => array('lang' => 'Can manage groups', 'cat' => 'user_group'),
|
|
'acl_a_groupadd' => array('lang' => 'Can add new groups', 'cat' => 'user_group'),
|
|
'acl_a_groupdel' => array('lang' => 'Can delete groups', 'cat' => 'user_group'),
|
|
'acl_a_ranks' => array('lang' => 'Can manage ranks', 'cat' => 'user_group'),
|
|
'acl_a_profile' => array('lang' => 'Can manage custom profile fields', 'cat' => 'user_group'),
|
|
'acl_a_names' => array('lang' => 'Can manage disallowed names', 'cat' => 'user_group'),
|
|
'acl_a_ban' => array('lang' => 'Can manage bans', 'cat' => 'user_group'),
|
|
|
|
'acl_a_viewauth' => array('lang' => 'Can view permission masks', 'cat' => 'permissions'),
|
|
'acl_a_authgroups' => array('lang' => 'Can alter permissions for individual groups', 'cat' => 'permissions'),
|
|
'acl_a_authusers' => array('lang' => 'Can alter permissions for individual users', 'cat' => 'permissions'),
|
|
'acl_a_fauth' => array('lang' => 'Can alter forum permission class', 'cat' => 'permissions'),
|
|
'acl_a_mauth' => array('lang' => 'Can alter moderator permission class', 'cat' => 'permissions'),
|
|
'acl_a_aauth' => array('lang' => 'Can alter admin permission class', 'cat' => 'permissions'),
|
|
'acl_a_uauth' => array('lang' => 'Can alter user permission class', 'cat' => 'permissions'),
|
|
'acl_a_roles' => array('lang' => 'Can manage roles', 'cat' => 'permissions'),
|
|
'acl_a_switchperm' => array('lang' => 'Can use others permissions', 'cat' => 'permissions'),
|
|
|
|
'acl_a_styles' => array('lang' => 'Can manage styles', 'cat' => 'misc'),
|
|
'acl_a_extensions' => array('lang' => 'Can manage extensions', 'cat' => 'misc'),
|
|
'acl_a_viewlogs' => array('lang' => 'Can view logs', 'cat' => 'misc'),
|
|
'acl_a_clearlogs' => array('lang' => 'Can clear logs', 'cat' => 'misc'),
|
|
'acl_a_modules' => array('lang' => 'Can manage modules', 'cat' => 'misc'),
|
|
'acl_a_language' => array('lang' => 'Can manage language packs', 'cat' => 'misc'),
|
|
'acl_a_email' => array('lang' => 'Can send mass email', 'cat' => 'misc'),
|
|
'acl_a_bots' => array('lang' => 'Can manage bots', 'cat' => 'misc'),
|
|
'acl_a_reasons' => array('lang' => 'Can manage report/denial reasons', 'cat' => 'misc'),
|
|
'acl_a_backup' => array('lang' => 'Can backup/restore database', 'cat' => 'misc'),
|
|
'acl_a_search' => array('lang' => 'Can manage search backends and settings', 'cat' => 'misc'),
|
|
);
|
|
}
|