Seite 1 von 1

Forum auch für Moderatoren sperren

Verfasst: 21.02.2008 15:39
von moneycoach
Hiho Community :)

Folgende Frage: Wenn ich das Forum über die ACP-Funktion sperre, werden Administratoren ja praktisch von dieser Sperre ausgenommen. Dass Moderatoren anscheinend auch von der Sperre ausgenommen werden und in mehr oder weniger vollem Umfang auch auf das Forum zugreiefn können, finde ich nicht so gut. Gibt es eine Möglichkeit, auch Moderatoren von dem Forum auszuschließen?

Danke im Vorraus,
moneycoach

Verfasst: 21.02.2008 19:07
von Boecki91
Du verwendest phpBB3.

KB:rechtesystem

Du kannst jeder Gruppe sagen "nein hier kommst du nicht rein" oder sogar "nein, hier kommst du nie rein"

Verfasst: 21.02.2008 19:18
von gn#36
In der Standardversion des phpBB 3.0.0 dürfen auf ein gesperrtes Board spezielle User dennoch zugreifen. Anders als mancher Admin das jedoch vielleicht erwarten würde, dürfen neben den Admins auch alle Moderatoren noch weiterhin auf das Board zugreifen. In einigen Fällen mag das nicht gewünscht sein, aus diesem Grund hier eine kurze Anleitung wie sich das ändern lässt:

In der includes/session.php findet sich folgende Passage:

Code: Alles auswählen

// Is board disabled and user not an admin or moderator?
		if ($config['board_disable'] && !defined('IN_LOGIN') && !$auth->acl_gets('a_', 'm_') && !$auth->acl_getf_global('m_'))
		
Ersetze diese Stelle durch das hier:

Code: Alles auswählen

// Is board disabled and user not an admin or moderator?
		if ($config['board_disable'] && !defined('IN_LOGIN') && !$auth->acl_get('a_'))
Wenn du das komfortabel haben möchtest kannst du auch ein eigenes Recht speziell für diesen Fall anlegen und dann selbst auswählen, wer zugreifen darf und wer nicht.

In dem Fall müsstest du die Stelle dann allerdings durch folgendes ersetzen:

Code: Alles auswählen

// Is board disabled and user not an admin or moderator?
		if ($config['board_disable'] && !defined('IN_LOGIN') && !$auth->acl_gets('a_', 'u_disabled_ignore'))
Zusätzlich dann noch das hier in der Datenbank ausführen (z.B. via KB:phpmyadmin):

Code: Alles auswählen

INSERT INTO phpbb_acl_options (auth_option, is_global, is_local, founder_only) VALUES ('u_disabled_ignore', 1, 0, 0);
Und in einer Sprachdatei mit dem Namen permissions_disabled_ignore.php (kann auch jeder andere Name sein der mit permissions_ beginnt oder die betr. Optionen werden in eine vorhandene eingefügt) im Verzeichnis language/xx/mods/ folgende Zeilen einfügen:

Code: Alles auswählen

<?php
/**
* DO NOT CHANGE
*/
if (empty($lang) || !is_array($lang))
{
    $lang = array();
}

// Adding the permissions
$lang = array_merge($lang, array(
    'acl_u_disabled_ignore'    => array('lang' => 'Kann das Forum im deaktivierten Zustand verwenden', 'cat' => 'misc'),
));
?>
xx steht dabei für das Sprachkürzel, wenn du es in allen Sprachen brauchst (z.b. weil andere Admins andere Sprachen nutzen), dann solltest du es in alle Sprachen legen, ansonsten reicht deine eigene Sprache, vermutlich also "de".

Das neu angelegte Recht findet sich unter "Diverses" bei den Benutzerrechten (du kannst dieses Recht also auch an normale User vergeben ohne diese zu Moderatoren zu machen).

Ich habe das jetzt nicht getestet, würde aber trotzdem davon ausgehen dass es funktioniert. Bitte trotzdem ausführlich testen.

Verfasst: 23.02.2008 16:00
von moneycoach
Super!

Danke gn#36, funktioniert 1A :)

Eine Frage aber noch: Wenn dem Benutzer erlaubt ist, das Forum zu benutzen, auch wenn es deaktiviert ist, wird oben nicht diese Leiste mit "Information: Dieses Board ist derzeit deaktiviert." angezeigt. Kann ich es irgendwie so einstellen, dass diese Leiste auch dann angezeigt wird, wenn es dem Benutzer grundsätzlich erlaubt ist, das deaktivierte Forum zu benutzen?

Verfasst: 23.02.2008 19:56
von gn#36
Welche von beiden Versionen hast du denn umgesetzt? Die mit der Zugangskontrolle?

Für die Anzeige ist dieser Part im proSilver Template zuständig:

Code: Alles auswählen

 <!-- IF S_BOARD_DISABLED and S_USER_LOGGED_IN and (U_MCP or U_ACP) --> 
		<div id="message" class="rules">
			<div class="inner"><span class="corners-top"><span></span></span>
				<strong>{L_INFORMATION}:</strong> {L_BOARD_DISABLED}
			<span class="corners-bottom"><span></span></span></div>
		</div>
		<!-- ENDIF -->
Im Subsilver2 wird es etwas ähnliches geben. Ich bin mir gerade nicht sicher ob die Kombination "Eingeloggt, aber kein Zugriff" existiert, wenn nicht dann könntest du einfach "and (U_MCP or U_ACP) aus dem IF herausnehmen und alle eingeloggten User würden diese Meldung ebenfalls erhalten. Wenn nicht, dann muss in die /includes/functions.php in der Funktion page_header noch folgendes gemacht werden:

suche

Code: Alles auswählen

'S_BOARD_DISABLED'		=> ($config['board_disable']) ? true : false,
danach einfügen

Code: Alles auswählen

'S_CAN_ACCESS'		=> $auth->acl_gets('a_', 'u_disabled_ignore') ? true : false,
Dann noch in oben genannter Stelle in der overall_header.html

Code: Alles auswählen

and (U_MCP or U_ACP)
ersetzen durch

Code: Alles auswählen

and S_CAN_ACCESS

Verfasst: 24.02.2008 13:12
von moneycoach
Ich hab die Version mit dem Berechtigungssystem benutzt.
Deinen Vorschlag probiere ich dann heute nachmittag aus und gebe mal Feedback, obs funktioniert ;)

Verfasst: 26.02.2008 22:27
von moneycoach
So :)

hatte dann heute endlich mal Zeit um deine Lösung auszuprobieren.
Ich bin mir gerade nicht sicher ob die Kombination "Eingeloggt, aber kein Zugriff" existiert
Genau die Kombination hatte ich (zu Testzwecken natürlich ;) ) mal ausprobiert.
Da funktioniert deine Lösung (der Code im Template) leider nicht. Aber ich habe dann selber mal ein wenig rumprobiert und bin auf folgendes gekommen:

Code: Alles auswählen

<!-- IF S_BOARD_DISABLED and S_USER_LOGGED_IN and S_CAN_ACCESS or (S_BOARD_DISABLED and not (S_USER_LOGGED_IN) and S_CAN_ACCESS) -->
Danke für deine Hilfe :wink:

Verfasst: 27.02.2008 00:28
von gn#36
Genau für diese Kombination hatte ich das ja extra so geschrieben dass es dann nicht angezeigt wird, schließlich sollte so ein User ja sowieso eine Meldung bekommen dass er gerade keinen Zugriff hat? So wie du es jetzt umgebaut hast kannst du jedenfalls S_USER_LOGGED_IN aus der Abfrage komplett rauslassen (und damit den kompletten or Teil), denn "nicht A oder A" passt bei jeder möglichen Kombination grundsätzlich immer.

Verfasst: 27.02.2008 12:39
von moneycoach
Stimmt, das war jetzt leicht unsinnig :D

Aber ich will ja den Hinweis auf jeden Fall anzeigen, wenn das Board deaktiviert ist, egal ob der / ein User nun eingeloggt ist oder nicht.

Daher dann so:

Code: Alles auswählen

<!-- IF S_BOARD_DISABLED and S_CAN_ACCESS -->
Das funktioniert dann reibungslos ;)