WBCE CMS Forum

WBCE CMS – Way Better Content Editing.

Du bist nicht angemeldet.

#1 11.06.2018 08:03:57

screamindan
Mitglied

GELÖST: Mitgliederbereich ohne Backendzugriff

Moin. Is ja immer wieder mal Thema... Gibt es mittlerweile eine Möglichkeit, interne Bereiche zur Verfügung zu stellen, bei denen der Benutzer keinen Zugriff auf das Backend bekommt?

EDIT: Die diesem Post folgende Lösung bezieht sich auf eine frühere WBCE Version...

Lösung für WBCE 1.4.0

Beitrag geändert von screamindan (19.09.2019 17:10:18)

Offline

#2 11.06.2018 08:38:40

florian
Administrator

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Du kannst eine Gruppe ohne Berechtigungen anlegen, die dieser Gruppe zugeordneten Benutzer haben dann ausschließlich lesenden Zugriff auf Seiten der Sichtbarkeitsstufe privat bzw. registriert, für die die Lesergruppe bei "Seite sehen (Frontend)" hinterlegt ist.
Allerdings können Benutzer diese Gruppe ihre eigenen Daten (Name, Mailadresse etc.) bearbeiten.
Es ist also out of the box nicht möglich, das als Sammelaccount zu verwenden; um dem Benutzer die Rechte zum Ändern der eigenen Daten zu entziehen, müssen die account/preferences.php und admin/preferences.php angepasst werden.
Angenommen, der Sammelaccount hat die Benutzer-ID 2:

account/preferences.php:

Nach

define('VISIBILITY', 'public');

einfügen:

$currentUser = $wb_inst->get_user_id();

Zeile

define('PAGE_CONTENT', WB_PATH.'/account/preferences_form.php');

ändern zu

if ($currentUser != 2) {
define('PAGE_CONTENT', WB_PATH.'/account/preferences_form.php');
} else {
define('PAGE_CONTENT', WB_PATH.'/account/preferences_noform.php');
}	

Die /account/preferences_noform.php mit folgendem Inhalt anlegen:

<?php

if (defined('WB_PATH') == false) {exit("Cannot access this file directly");}
$sCallingScript = $_SERVER['SCRIPT_NAME'];
$_SESSION['HTTP_REFERER'] = isset($_SESSION['HTTP_REFERER']) ? $_SESSION['HTTP_REFERER'] : $sCallingScript;
if ($wb->is_authenticated() === false) {
// User needs to login first
    header("Location: " . WB_URL . "/account/login.php?redirect=" . $wb->link);
    exit(0);
}

echo "Du hast keine Berechtigung zum &Auml;ndern der Daten!";

/admin/preferences/index.php:
Zeilen

// Parse template for preferences form
    $template->parse('main', 'main_block', false);
    $output = $template->finish($template->parse('output', 'page'));
    return $output;

ändern zu

// Parse template for preferences form
	if ($admin->get_user_id()!=2) {							
    $template->parse('main', 'main_block', false);
    $output = $template->finish($template->parse('output', 'page'));
    return $output;
	} else {
		return "Du hast keine Berechtigung zum Ändern der Daten!";
	}  

Beitrag geändert von florian (23.10.2018 17:27:15)


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#3 11.06.2018 09:00:31

screamindan
Mitglied

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Ah prima, das dürfte so erstmal reichen. Wo kann ich die Benutzer ID denn sehen?

Offline

#4 11.06.2018 09:09:50

florian
Administrator

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Admintools > User Search > als Suchbegriff *  (oder den betr. Benutzernamen oder Teile davon mit Asterisk) eingeben und auf Suchen klicken

Beitrag geändert von florian (11.06.2018 09:10:41)


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#5 11.06.2018 12:00:44

screamindan
Mitglied

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Vielen Dank, klappt gut!  thumb_up

Offline

#6 23.10.2018 16:10:43

pfreud01
Mitglied

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Danke für die gute Anleitung, aber das ganze funktioniert nicht, wenn das Droplet LoginBox verwendet wird. Dort wird der Menüpunkt "Meine Daten" ausgegeben und kann angeklickt bzw. verändert werden. Wie krieg ich das hin, dies zu verhindern?  sad

Offline

#7 23.10.2018 17:04:18

florian
Administrator

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Das Droplet generiert keine eigene Seite zum Ändern der pers. Daten. Wenn Du wie oben beschrieben die account/preferences.php änderst, und dann Dich nicht mit Deinen eigenen (Admin-)Daten, sondern als Testnutzer anmeldest, wirst Du mMn beim Anklicken des "Meine Daten"-Links kein Formular zum Ändern der Daten sehen.

Um den Link aus der vom Droplet generierten Loginbox geht, so genügt es, die Zeile

$return_value .= '<li class="preference"><a href="'.PREFERENCES_URL.'" title="'.$MENU['PREFERENCES'].'">'.$MENU['PREFERENCES'].'</a></li>'."\n";

zu entfernen.


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#8 23.10.2018 17:09:57

pfreud01
Mitglied

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Aber dann kann niemand mehr die Passwort-Ändern-Funktion nutzen. Ich bräuchte es wie oben, dass eben nur eine bestimmte Gruppe die Daten nicht ändern kann, aber andere Gruppen schon.  hmm

Beitrag geändert von pfreud01 (23.10.2018 17:10:21)

Offline

#9 23.10.2018 17:33:50

pfreud01
Mitglied

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Selbst hinbekommen: Das Droplet duplizieren und aus der Kopie ein Droplet LoginBoxOhnePreferences machen. Darin Zeile 107 entfernen. Nun kann sich die Gruppe ohne Backendzugriff damit einloggen ohne die Daten zu ändern. Bei mir gibts da eine Weiterleitung auf eine interne Seite. Den anderen Gruppen biete ich dort nochmals das normale Droplet an, wo die eigenen Daten änderbar sind. Reicht für mich erstmal. Danke für den Denkanstoß.  smile

Offline

#10 16.09.2019 08:42:09

screamindan
Mitglied

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Moin Ich hab ja auf WBCE 1.4.0 umgestellt. Bei Anwahl von User search bekomme ich ne Fehlermeldung:

Warning: require(/www/htdocs/ordner/cms/modules/user_search/tool.php): failed to open stream: No such file or directory in /www/htdocs/ordner/cms/admin/admintools/tool.php on line 88

Offline

#11 16.09.2019 08:52:19

florian
Administrator

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

1. User Search ist durch Admin-Tools » Account- und Registrierungs-Einstellungen ersetzt worden.
2. Der Eintrag für User Search wird aus unerfindlichen Gründen beim Update nicht gelöscht. Bitte mal Erweiterungen > erweitert > Module neu laden ausführen.


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#12 16.09.2019 08:54:20

screamindan
Mitglied

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Nach neu Laden ist es weg. Stimmt die Anleitung oben denn trotzdem? Das muss ich ja wieder da reinklöppeln...

Beitrag geändert von screamindan (16.09.2019 08:54:40)

Offline

#13 16.09.2019 08:57:25

florian
Administrator

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Ja, müsste noch stimmen. Ansonsten: versuch macht kluch ;-)


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#14 16.09.2019 09:13:13

screamindan
Mitglied

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Ich glaube, ein paar Pfade passen nicht.

define('PAGE_CONTENT', WB_PATH.'/account/preferences_form.php');

WB_PATH ist jetzt wahrscheinlich ACCOUNT_TOOL_PATH... Muss ich später mal vergleichen...

Offline

#15 16.09.2019 09:22:00

colinax
Developer

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Ja, die sind neu, ob es eine Weiterleitung gibt weis ich nicht.

define('PAGE_CONTENT', ACCOUNT_TOOL_PATH .'/account/form_preferences.php');

Offline

#16 16.09.2019 09:32:59

screamindan
Mitglied

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Unter /account gibt es bei mir keine Datei form_preferences.php... Kannst Du die Anleitung bei Gelegenheit mal durchsehen? Is nich ganz brennend, würde ich aber gern wieder so haben. smile

Offline

#17 16.09.2019 09:39:15

florian
Administrator

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Die Datei liegt unter /modules/tool_account_settings/account/


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#18 16.09.2019 09:55:57

screamindan
Mitglied

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Nach Anmelden im Backend und Klicken auf "meine Daten" kommt folgende Fehlermeldung:

Parse error: syntax error, unexpected end of file in /www/htdocs/ordner/cms/admin/preferences/index.php on line 178

Beitrag geändert von screamindan (16.09.2019 09:58:07)

Offline

#19 16.09.2019 10:02:19

florian
Administrator

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Dann fehlt da irgendwo eine }


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#20 16.09.2019 10:05:18

screamindan
Mitglied

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

/*   // Parse template for preferences form
    $oTemplate->parse('main', 'main_block', false);
    $output = $oTemplate->finish($oTemplate->parse('output', 'page'));
    return $output;
}
*/

// Parse template for preferences form
	if ($admin->get_user_id()!=3) {							
    $template->parse('main', 'main_block', false);
    $output = $template->finish($template->parse('output', 'page'));
    return $output;
	} else {
		return "Du hast keine Berechtigung zum Ändern der Daten!";
	}  

// test if valid $admin-object already exists (bit complicated about PHP4 Compatibility)
if (!(isset($admin) && is_object($admin) && (get_class($admin) == 'admin')) )
{
    require '../../config.php';
    require_once WB_PATH.'/framework/class.admin.php';
    $admin = new admin('Preferences');
}
echo build_page($admin, $database);
$admin->print_footer();

Das steht jetzt drin. Ich hoffe, man kann das so auskommentieren... Wo ne Klammer fehlt, seh ich nicht.

Beitrag geändert von screamindan (16.09.2019 10:05:43)

Offline

#21 16.09.2019 10:07:45

screamindan
Mitglied

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Wenn ich am Ende eine schliessende Klammer einfüge, kommt ein leerer Browsertab.

Offline

#22 16.09.2019 10:17:06

colinax
Developer

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

screamindan schrieb:

Parse error: syntax error, unexpected end of file in /www/htdocs/ordner/cms/admin/preferences/index.php on line 178

178 Zeilen? Die Datei admin/preferences/index.php hat ja selbst nur 167 Zeilen

Offline

#23 16.09.2019 10:18:39

screamindan
Mitglied

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Ich hab ja auch das hier eingefügt (siehe meinen Post oben)

// Parse template for preferences form
	if ($admin->get_user_id()!=3) {							
    $template->parse('main', 'main_block', false);
    $output = $template->finish($template->parse('output', 'page'));
    return $output;
	} else {
		return "Du hast keine Berechtigung zum Ändern der Daten!";
	}  

Offline

#24 16.09.2019 10:19:56

screamindan
Mitglied

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Der komplette Inhalt der index.php

[== PHP ==]
<?php
/**
 *
 * @category        admin
 * @package         preferences
 * @author          WebsiteBaker Project
 * @copyright       Ryan Djurovich
 * @copyright       WebsiteBaker Org. e.V.
 * @link            http://websitebaker.org/
 * @license         http://www.gnu.org/licenses/gpl.html
 * @platform        WebsiteBaker 2.8.3
 * @requirements    PHP 5.3.6 and higher
 * @version         $Id: index.php 5 2015-04-27 08:02:19Z luisehahne $
 * @filesource      $HeadURL: https://localhost:8443/svn/wb283Sp4/SP4/branches/wb/admin/preferences/index.php $
 * @lastmodified    $Date: 2015-04-27 10:02:19 +0200 (Mo, 27. Apr 2015) $
 *
 */

// prevent this file from being accessed directly
//if(defined('WB_PATH') == false) { exit("Cannot access this file directly"); }
//Workaround if this is first page (WBAdmin in use)

// put all inside a function to prevent global vars
function build_page( &$admin, &$database )
{
    global $HEADING, $TEXT;
    include_once WB_PATH.'/framework/functions-utf8.php';
    
    // Setup template object, parse vars to it, then parse it
    // Create new template object
    $oTemplate = new Template(dirname($admin->correct_theme_source('preferences.htt')));
    $oTemplate->set_file( 'page', 'preferences.htt' );
    $oTemplate->set_block( 'page', 'main_block', 'main' );
    
    // read user-info from table users and assign it to template
    $sSql  = 'SELECT `display_name`, `username`, `email` FROM `{TP}users` WHERE `user_id` = %s';
    if ($res_user = $database->query(sprintf($sSql, (int)$admin->get_user_id()))){
        if ($rec_user = $res_user->fetchRow(MYSQL_ASSOC) ) {
            $oTemplate->set_var(
                array(
                    'DISPLAY_NAME' => $rec_user['display_name'],
                    'USERNAME'     => $rec_user['username'],
                    'EMAIL'        => $rec_user['email'],
                    'ADMIN_URL'    => ADMIN_URL               
                )
            ); 
        }
    }
    
    // read available languages from table addons and assign it to the template
    $sSql  = "SELECT * FROM `{TP}addons` WHERE `type` = 'language' ORDER BY `directory`";
    if ($res_lang = $database->query($sSql)) {
        $oTemplate->set_block('main_block', 'language_list_block', 'language_list');
        while($rec_lang = $res_lang->fetchRow(MYSQL_ASSOC)){
            $langIcons = (empty($rec_lang['directory'])) ? 'none' : strtolower($rec_lang['directory']);
            $oTemplate->set_var(
                array(
                    'CODE'     => $rec_lang['directory'],
                    'NAME'     => $rec_lang['name'],
                    'FLAG'     => WB_URL.'/languages/'.$langIcons,
                    'SELECTED' => LANGUAGE == $rec_lang['directory'] ? ' selected="selected"' : ''               
                )
            ); 
            $oTemplate->parse('language_list', 'language_list_block', true);
        }
    }
    
    // Insert default timezone values
    $user_time = true;
    include_once ADMIN_PATH.'/interface/timezones.php';
    $oTemplate->set_block('main_block', 'timezone_list_block', 'timezone_list');
    foreach($TIMEZONES as $hour_offset => $title){
        $oTemplate->set_var(
            array(
                'VALUE'     => $hour_offset,
                'NAME'      => $title,
                'SELECTED'  => $admin->get_timezone() == ($hour_offset * 3600) ? ' selected="selected"' : ''
            )
        );
        $oTemplate->parse('timezone_list', 'timezone_list_block', true);
    }
    
    // Insert date format list
    include_once ADMIN_PATH.'/interface/date_formats.php';
    $oTemplate->set_block('main_block', 'date_format_list_block', 'date_format_list');
    foreach ($DATE_FORMATS as $format => $title )
    {
        $format = str_replace('|', ' ', $format); // Add's white-spaces (not able to be stored in array key)
        $oTemplate->set_var( 'VALUE', ($format != 'system_default' ? $format : 'system_default') );
        $oTemplate->set_var( 'NAME',  $title );
        if ((DATE_FORMAT == $format && !isset($_SESSION['USE_DEFAULT_DATE_FORMAT'])) ||
            ('system_default' == $format && isset($_SESSION['USE_DEFAULT_DATE_FORMAT'])) )
        {
            $oTemplate->set_var('SELECTED', ' selected="selected"');
        }else {
            $oTemplate->set_var('SELECTED', '');
        }
        $oTemplate->parse('date_format_list', 'date_format_list_block', true);
    }
    
    // Insert time format list
    include_once ADMIN_PATH.'/interface/time_formats.php';
    $oTemplate->set_block('main_block', 'time_format_list_block', 'time_format_list');
    foreach ($TIME_FORMATS as $format => $title )
    {
        $format = str_replace('|', ' ', $format); // Add's white-spaces (not able to be stored in array key)
        $oTemplate->set_var('VALUE', $format != 'system_default' ? $format : 'system_default' );
        $oTemplate->set_var('NAME',  $title);
        if ((TIME_FORMAT == $format && !isset($_SESSION['USE_DEFAULT_TIME_FORMAT'])) ||
            ('system_default' == $format && isset($_SESSION['USE_DEFAULT_TIME_FORMAT'])) )
        {
            $oTemplate->set_var('SELECTED', ' selected="selected"');
        } else {
            $oTemplate->set_var('SELECTED', '');
        }
        $oTemplate->parse('time_format_list', 'time_format_list_block', true);
    }

    $oTemplate->set_var(
        array( 
            // assign systemvars to template
            'ADMIN_URL'          => ADMIN_URL,
            'WB_URL'             => WB_URL,
            'THEME_URL'          => THEME_URL,
            'ACTION_URL'         => ADMIN_URL.'/preferences/save.php',
            'FTAN'               => $admin->getFTAN(),
            'FORM_NAME'          => 'preferences_save',
            'INPUT_NEW_PASSWORD' => $admin->passwordField('new_password_1'),

            // assign language vars
            'HEADING_MY_SETTINGS'        => $HEADING['MY_SETTINGS'],
            'HEADING_MY_EMAIL'           => $HEADING['MY_EMAIL'],
            'HEADING_MY_PASSWORD'        => $HEADING['MY_PASSWORD'],
            'TEXT_SAVE'                  => $TEXT['SAVE'],
            'TEXT_RESET'                 => $TEXT['RESET'],
            'TEXT_DISPLAY_NAME'          => $TEXT['DISPLAY_NAME'],
            'TEXT_USERNAME'              => $TEXT['USERNAME'],
            'TEXT_EMAIL'                 => $TEXT['EMAIL'],
            'TEXT_LANGUAGE'              => $TEXT['LANGUAGE'],
            'TEXT_TIMEZONE'              => $TEXT['TIMEZONE'],
            'TEXT_DATE_FORMAT'           => $TEXT['DATE_FORMAT'],
            'TEXT_TIME_FORMAT'           => $TEXT['TIME_FORMAT'],
            'TEXT_CURRENT_PASSWORD'      => $TEXT['CURRENT_PASSWORD'],
            'TEXT_NEW_PASSWORD'          => $TEXT['NEW_PASSWORD'],
            'TEXT_RETYPE_NEW_PASSWORD'   => $TEXT['RETYPE_NEW_PASSWORD'],
            'TEXT_NEW_PASSWORD'          => $TEXT['NEW_PASSWORD'],
            'TEXT_RETYPE_NEW_PASSWORD'   => $TEXT['RETYPE_NEW_PASSWORD'],
            'TEXT_NEED_CURRENT_PASSWORD' => $TEXT['NEED_CURRENT_PASSWORD'],
            'EMPTY_STRING'               => ''
        )
    );
    
 /*   // Parse template for preferences form
    $oTemplate->parse('main', 'main_block', false);
    $output = $oTemplate->finish($oTemplate->parse('output', 'page'));
    return $output;
	}
*/

// Parse template for preferences form
	if ($admin->get_user_id()!=3) {							
    $template->parse('main', 'main_block', false);
    $output = $template->finish($template->parse('output', 'page'));
    return $output;
	} else {
		return "Du hast keine Berechtigung zum Ändern der Daten!";
	}  

// test if valid $admin-object already exists (bit complicated about PHP4 Compatibility)
if (!(isset($admin) && is_object($admin) && (get_class($admin) == 'admin')) )
{
    require '../../config.php';
    require_once WB_PATH.'/framework/class.admin.php';
    $admin = new admin('Preferences');
}
echo build_page($admin, $database);
$admin->print_footer();

Offline

#25 16.09.2019 10:27:57

colinax
Developer

Re: GELÖST: Mitgliederbereich ohne Backendzugriff

Die Datei und der Bereich sind korrekt verschachtelt, da fehlt kein }

Was gerade auffällt $template heißt seit WBCE 1.4.0 jetzt $oTemplate vlt ist ja dass der Fehler

Offline

Fußzeile des Forums

up