Wstęp: Witam. Przy pracach na swoim forum doszedłem do pewnego rozwiązania swojego problemu.
Lecz chciałbym z Wami skonsultować kilka elementów. Głównie poprawność zamieszczenia kodu w danym miejscu [gdyż sam kod to po prostu tylko warunek].
Cel zmian: zablokowanie dostępu dla określonej grupy do niektórych opcji/stron skryptu
Pisząc ten temat operuję na standardowych plikach VB 4.1.5, dlatego nie ma sensu ich zamieszczać.
Kod jakim operuję ma postać:
Kod php:
if (is_member_of($vbulletin->userinfo, id1, id2, ..., idn))
{
print_stop_message('no_permission');
}
gdzie id1, id2, ..., idn -> id odpowiedniej grupy/grup
Plik: modcp/users.php
Linie: 277-284
Pożądany efekt: zablokowanie określonej grupie możliwości edycji/podglądu ustawień użytkownika
Kod php:
// ###################### Start viewuser #######################
if ($_REQUEST['do'] == 'viewuser')
{
if (!can_moderate(0, 'canviewprofile'))
{
print_stop_message('no_permission');
}
Dodanie kodu warunku grupy [sprawdzenie przynależności] po ww. wymienionym. Kod prezentuje się tak wtedy
Kod php:
// ###################### Start viewuser #######################
if ($_REQUEST['do'] == 'viewuser')
{
if (!can_moderate(0, 'canviewprofile'))
{
print_stop_message('no_permission');
}
//dodany kod
if (is_member_of($vbulletin->userinfo, id1, id2, ..., idn))
{
print_stop_message('no_permission');
}
//dodany kod
Kolejny plik: modcp/thread.php
Linia: 27
Pożądany efekt: zablokowanie określonej grupie możliwości przenoszenia, czyszczenia wątków z poziomu MCP [zwykłe opcje wątku dostęne]
Dodanie po niej kodu na warunek grupy.
Podgląd po edycji:
Kod php:
// ######################## SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
// ##################### DEFINE IMPORTANT CONSTANTS #######################
define('CVS_REVISION', '$RCSfile$ - $Revision: 32878 $');
define('NOZIP', 1);
// #################### PRE-CACHE TEMPLATES AND DATA ######################
$phrasegroups = array('thread', 'threadmanage', 'prefix');
$specialtemplates = array();
// ########################## REQUIRE BACK-END ############################
require_once('./global.php');
require_once(DIR . '/includes/adminfunctions_prefix.php');
//dodany kod
if (is_member_of($vbulletin->userinfo, id1, id2, ..., idn))
{
print_stop_message('no_permission');
}
//dodany kod
@set_time_limit(0);
// ############################# LOG ACTION ###############################
$vbulletin->input->clean_array_gpc('r', array(
'forumid' => TYPE_INT,
'pollid' => TYPE_INT,
'type' => TYPE_STR,
));
log_admin_action(iif(!empty($vbulletin->GPC['forumid']), "forum id = " . $vbulletin->GPC['forumid'], iif(!empty($vbulletin->GPC['pollid']), "poll id = " . $vbulletin->GPC['pollid'])));
// ########################################################################
// ######################### START MAIN SCRIPT ############################
// ########################################################################
Następny plik: modcp/forum.php
Linia: 25
Pożądany efekt: zablokowanie określonej grupie możliwości "edytowania forum"
Dodanie po niej kodu na warunek grupy
Podgląd po edycji:
Kod php:
// ######################## SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
// ##################### DEFINE IMPORTANT CONSTANTS #######################
define('CVS_REVISION', '$RCSfile$ - $Revision: 32878 $');
// #################### PRE-CACHE TEMPLATES AND DATA ######################
$phrasegroups = array('forum');
$specialtemplates = array();
// ########################## REQUIRE BACK-END ############################
require_once('./global.php');
//dodany kod
if (is_member_of($vbulletin->userinfo, id1, id2, ..., idn))
{
print_stop_message('no_permission');
}
//dodany kod
// ############################# LOG ACTION ###############################
$vbulletin->input->clean_array_gpc('r', array(
'moderatorid' => TYPE_INT,
'forumid' => TYPE_INT
));
log_admin_action(iif($vbulletin->GPC['moderatorid'] != 0, " moderator id = " . $vbulletin->GPC['moderatorid'], iif($vbulletin->GPC['forumid'] != 0, "forum id = " . $vbulletin->GPC['forumid'])));
// ########################################################################
// ######################### START MAIN SCRIPT ############################
// ########################################################################
Ostatni z przykładowych plików: modcp/announcement.php
Linia: 27
Dodanie po niej warunku grupy
Pożądany efekt: zablokowanie określonej grupie możliwości dodania nowego ogłoszenia
Pogląd po edycji:
Kod php:
// ######################## SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
// ##################### DEFINE IMPORTANT CONSTANTS #######################
define('CVS_REVISION', '$RCSfile$ - $Revision: 34547 $');
// #################### PRE-CACHE TEMPLATES AND DATA ######################
$phrasegroups = array('posting');
$specialtemplates = array();
// ########################## REQUIRE BACK-END ############################
require_once('./global.php');
require_once(DIR . '/includes/adminfunctions_announcement.php');
//dodany kod
if (is_member_of($vbulletin->userinfo, id1, id2, ..., idn))
{
print_stop_message('no_permission');
}
//dodany kod
// ############################# LOG ACTION ###############################
$vbulletin->input->clean_array_gpc('r', array( 'announcementid' => TYPE_INT));
log_admin_action(!empty($vbulletin->GPC['announcementid']) ? "announcement id = " . $vbulletin->GPC['announcementid'] : '');
// ########################################################################
// ######################### START MAIN SCRIPT ############################
// ########################################################################
Podsumowując: Pożądane efekty udało się uzyskać. Po krótkich testach nie widzę efektów ubocznych, lecz wolałbym skonsultować z bardziej/dłużej/lepiej/itp obeznanymi z skryptem osobami poprawność umieszczonych kodów.