- Mit dem Modul lässt sich auf der Basis jedes Artikels festlegen, ob ein Benutzer diesen aufrufen darf oder nicht.
- Dies wird in 3 Stufen unterschieden: Eingeloggte Benutzer MIT Artikelrecht, eingeloggte Benutzer OHNE Artikelrecht sowie nicht eingeloggte Benutzer.
- Die Rechte werden im Template gemäß den vorhandenen Frontendgruppenrechten gesetzt.
- Das Modul wird nur auf DEN Seiten konfiguriert, die tatsächlich geschützt werden sollen. Wird der Zugriff verweigert, so sind für die in Frage kommenden Fälle Artikel zu definieren, die dem Besucher statt dessen angezeigt werden sollen.
Voraussetzungen und Erläuterungen:
- Da ein header-redirect stattfindet, MUSS das Modul bzw. der Container an den absoluten Anfang des Layouts, erste Zeile.
- Wird keine Gruppe im Template ausgewählt, wird das Modul quasi ignoriert, beeinflusst die Seite also nicht.
- Ich habe das Modul standardmäßig an alle Templates eingebunden, das ist aber nicht zwingend.
- Die Gruppennummer wird bezogen aus der con_frontendgroups ("idfrontendgroup"). Es darf keine ID > 100 vorkommen.
- Ich bin kein großer Programmierer, also ist alles ein wenig handgestrickt.
Modul-Input:
Code: Alles auswählen
?><?php
/***********************************************
* Trenner für eingeloggte Kunden oder normale Besucher
* Das Modul leitet die eingeloggten Besucher auf Seite A, normale Besucher auf Seite B
*
* Author : Viktor Lehmann
* Copyright : TONE2TONE e.K.
* Created : 07.08.2008
************************************************/
$sql_getFEGroups = "SELECT * FROM ".$cfg['tab']['frontendgroups'];
$result = mysql_query($sql_getFEGroups);
echo '<table><tr><td>'.mi18n("Zur Verfügung stehende Gruppen:").'</td></tr>',chr(10);
$cmsval = 1;
while ($row = mysql_fetch_array($result)) {
$groupid = $row['idfrontendgroup'];
if ("CMS_VALUE[$groupid]" != '') {
$group_val = ' checked';
} else {
$group_val = '';
}
echo '<tr><td style="padding:2px;"><input type="checkbox" name="CMS_VAR['.$groupid.']" value="yes"'.$group_val.'> '.$row['groupname'].'</td></tr>',chr(10);
$cmsval++;
}
$db2 = new DB_Contenido;
$cms_idcatart1 = "CMS_VALUE[101]";
$cms_idcatart2 = "CMS_VALUE[102]";
$sql = "SELECT * FROM ".$cfg["tab"]["cat_tree"]." AS a,".$cfg["tab"]["cat_lang"]." AS b,
".$cfg["tab"]["cat"]." AS c WHERE a.idcat = b.idcat AND c.idcat = a.idcat AND
c.idclient = '".$client."' AND b.idlang = '".$lang."' ORDER BY a.idtree";
$db->query($sql);
// Wähle Artikel für registrierte, unberechtigte Benutzer
echo '<tr><td>'.mi18n("Artikel für registrierte Kunden ohne Berechtigung:").'</td></tr>',chr(10);
echo '<tr><td><select name="CMS_VAR[101]" size="1">',chr(10);
echo ' <option value="">'.i18n("None").'</option>',chr(10);
while ($db->next_record()) {
$spaces = "";
for ($i=0; $i<$db->f("level"); $i++) {
$spaces .= " ";
}
echo ' <option style="font-weight: bold; color: #666666; background-color: #eeeeee;" value="">'.$spaces.' > '.$db->f("name").'</option>',chr(10);
if ($cfg["is_start_compatible"] == true) {
$sql2 = "SELECT * FROM ".$cfg["tab"]["cat_art"]." AS a, ".$cfg["tab"]["art"]." AS b,
".$cfg["tab"]["art_lang"]." AS c WHERE a.idcat = '".$db->f("idcat")."'
AND b.idart = a.idart AND c.idart = a.idart AND
c.idlang = '".$lang."' AND b.idclient = '".$client."' ORDER BY a.is_start DESC, c.title ASC";
} else {
$sql2 = "SELECT * FROM ".$cfg["tab"]["cat_art"]." AS a, ".$cfg["tab"]["art"]." AS b,
".$cfg["tab"]["art_lang"]." AS c WHERE a.idcat = '".$db->f("idcat")."'
AND b.idart = a.idart AND c.idart = a.idart AND
c.idlang = '".$lang."' AND b.idclient = '".$client."' ORDER BY c.title ASC";
}
$db2->query($sql2);
while ($db2->next_record()) {
$selected = "";
$style = "";
$tmp_title = $db2->f("title");
if (strlen($tmp_title) > 32) {
$tmp_title = substr($tmp_title, 0, 32);
}
if ($cfg["is_start_compatible"] == true) {
$is_start = $db2->f("is_start");
} else {
if (isStartArticle($db2->f("idartlang"), $db2->f("idcat"), $lang) == true) {
$is_start = 1;
} else {
$is_start = 0;
}
}
$strValue = $db2->f("idcatart");
if ($is_start == 1 && $db2->f("online") == 0) {
$style = "color: #ff0000";
$strValue = "";
}
if ($is_start == 1 && $db2->f("online") == 1) {
$style = "color: #0000ff";
}
if ($is_start == 0 && $db2->f("online") == 0) {
$style = "color: #666666";
$strValue = "";
}
if ($cms_idcatart1 == $db2->f("idcatart")) {
$selected = " selected";
}
echo ' <option style="'.$style.'" value="'.$strValue.'"'.$selected.'> '.$spaces.' | '.$tmp_title.'</option>',chr(10);
}
}
echo ' </select>',chr(10);
echo '</td></tr>',chr(10);
// Ende Wähle Artikel für registrierte, unberechtigte Benutzer
// Wähle Artikel für Unregistrierte
echo '<tr><td>'.mi18n("Artikel für registrierte Kunden ohne Berechtigung:").'</td></tr>',chr(10);
echo '<tr><td><select name="CMS_VAR[102]" size="1">',chr(10);
echo ' <option value="">'.i18n("None").'</option>',chr(10);
$db->query($sql);
while ($db->next_record()) {
$spaces = "";
for ($i=0; $i<$db->f("level"); $i++) {
$spaces .= " ";
}
echo ' <option style="font-weight: bold; color: #666666; background-color: #eeeeee;" value="">'.$spaces.' > '.$db->f("name").'</option>',chr(10);
if ($cfg["is_start_compatible"] == true) {
$sql2 = "SELECT * FROM ".$cfg["tab"]["cat_art"]." AS a, ".$cfg["tab"]["art"]." AS b,
".$cfg["tab"]["art_lang"]." AS c WHERE a.idcat = '".$db->f("idcat")."'
AND b.idart = a.idart AND c.idart = a.idart AND
c.idlang = '".$lang."' AND b.idclient = '".$client."' ORDER BY a.is_start DESC, c.title ASC";
} else {
$sql2 = "SELECT * FROM ".$cfg["tab"]["cat_art"]." AS a, ".$cfg["tab"]["art"]." AS b,
".$cfg["tab"]["art_lang"]." AS c WHERE a.idcat = '".$db->f("idcat")."'
AND b.idart = a.idart AND c.idart = a.idart AND
c.idlang = '".$lang."' AND b.idclient = '".$client."' ORDER BY c.title ASC";
}
$db2->query($sql2);
while ($db2->next_record()) {
$selected = "";
$style = "";
$tmp_title = $db2->f("title");
if (strlen($tmp_title) > 32) {
$tmp_title = substr($tmp_title, 0, 32);
}
if ($cfg["is_start_compatible"] == true) {
$is_start = $db2->f("is_start");
} else {
if (isStartArticle($db2->f("idartlang"), $db2->f("idcat"), $lang) == true) {
$is_start = 1;
} else {
$is_start = 0;
}
}
$strValue = $db2->f("idcatart");
if ($is_start == 1 && $db2->f("online") == 0) {
$style = "color: #ff0000";
$strValue = "";
}
if ($is_start == 1 && $db2->f("online") == 1) {
$style = "color: #0000ff";
}
if ($is_start == 0 && $db2->f("online") == 0) {
$style = "color: #666666";
$strValue = "";
}
if ($cms_idcatart2 == $db2->f("idcatart")) {
$selected = " selected";
}
echo ' <option style="'.$style.'" value="'.$strValue.'"'.$selected.'> '.$spaces.' | '.$tmp_title.'</option>',chr(10);
}
}
echo ' </select>',chr(10);
echo '</td></tr>',chr(10);
// Ende Wähle Artikel für Unregistrierte
echo '</table>',chr(10);
?><?php
Modul-Output:
Code: Alles auswählen
<?php
/****************************************************
** Contenido 4.8.x Modul
** OUTPUT
**
** Name: Privacy Check on Articles
** Autor: Viktor Lehmann
** Version: 1.0.0
** Erstellt: 07.08.2008
** Modifiziert: 07.08.2008
*****************************************************/
if (!$contenido){ // in der Artikelbearbeitung im Backend nicht ausführen
$permGroups = "";
// Gruppen einlesen und Gruppenrechte holen
$sql_getFEGroups = "SELECT * FROM ".$cfg['tab']['frontendgroups'];
$result = mysql_query($sql_getFEGroups);
while ($row = mysql_fetch_array($result)) {
$groupid = $row['idfrontendgroup'];
if ( "CMS_VALUE[$groupid]" != "" ) {
$permGroups[] = $groupid;
}
}
$targetLogged = $sess->url('front_content.php?idcatart=CMS_VALUE[101]');
$targetNormal = $sess->url('front_content.php?idcatart=CMS_VALUE[102]');
if ($permGroups == "") {
$accessGranted = true; // keine Rechtewünsche gesetzt, also durchwinken
} else {
$accessGranted = false; // Werte sind gesetzt, also Rechte zurückschrauben.
}
if ($auth->auth["uid"] != "nobody")
{
$userid = $auth->auth["uid"];
$permissions = $auth->auth["perm"];
$permissions = explode(',', $permissions);
foreach ($permissions as $perm)
if ($perm == "sysadmin" || $perm == "admin[".$client."]")
$accessGranted = true;
if (!$accessGranted)
{
foreach ( $permGroups as $userGroup) {
$db_Connect = new DB_Contenido;
$sql_checkFrontendAccess = "SELECT *
FROM ".$cfg['tab']['frontendgroupmembers']."
WHERE (idfrontenduser=".$userid. " AND
idfrontendgroup = ".(int)$userGroup.")";
$db_Connect->query($sql_checkFrontendAccess);
if ($db_Connect->next_record())
$accessGranted = true;
}
}
if(!$accessGranted)
{
header("Location: $targetLogged"); // wenn eingeloggt, aber keine Berechtigung
}
}
elseif ($accessGranted == false)
{
header("Location: $targetNormal"); //wenn nicht eingeloggt
}
}
/* Wird das Skript unterbrechungsfrei beendet, erhält der registrierte Nutzer
Zugangsberechtigung zu diesem Artikel. */
?>