geschützte container per frontend login

Gesperrt
kahuna
Beiträge: 23
Registriert: Fr 3. Dez 2004, 03:42
Wohnort: mannheim
Kontaktdaten:

geschützte container per frontend login

Beitrag von kahuna »

habe ne ecke danach gesucht hier und wurde nicht fündig, hoffe ich habe das nicht übersehen,

würde mit der neusten contenido version 4.6.8 gerne folgendes realisieren:

man sieht die seite ganz gewöhnlich, auf der rechten seite sind auch einige container zu sehen (unternavigation, newsletteranmeldung und co) - nun soll man sich einloggen können, darauf hin soll ein zusätzlicher container eben dort erscheinen (kalender) - habt ihr vielleicht ne idee wie man das schnell umsetzen kann? mit dem frontend login habe ich bisher noch garnicht gearbeitet (und warte gerade auf serverfreischaltung und kann daher nur "im kopf basteln" ;) ) .... danke schonmal vorab,

kah
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

man könnte das modul das eventuell nur bei eingeloggten usern zu sehen sein soll von folgendem code umschließen

Code: Alles auswählen

<?php
if ($auth->auth["uid"] != "nobody"){

// any code


}
?>
*** make your own tools (wishlist :: thx)
sherman
Beiträge: 40
Registriert: Mi 29. Nov 2006, 00:44
Kontaktdaten:

Beitrag von sherman »

emergence hat geschrieben:man könnte das modul das eventuell nur bei eingeloggten usern zu sehen sein soll von folgendem code umschließen

Code: Alles auswählen

<?php
if ($auth->auth["uid"] != "nobody"){

// any code


}
?>
Hat das irgendjemand schon mal getestet. Habe námlich das gleiche Problem, Container für eingeloggte Frontenduser sichtbar zu machen bzw. für Unberechtigte unsichtbar zu lassen. Die Idee ist, bestimmte Informationen, z.B. Preislisten, in den Artikelbeschreibungen den autorisierten Partner zugänglich zu machen, ohne dafür einen kompletten "Partner-Bereich" (neuer Kategorienbaum) anzulegen.

Weiss jmd. wie man so etwas macht?

Danke
Contenider
Beiträge: 503
Registriert: Do 6. Apr 2006, 01:40
Kontaktdaten:

Beitrag von Contenider »

In phpBB Foren wir mittels dieser Art das gleiche Konzept realisiert. Ich kenne mich leider nicht sehr gut mit PHP aus, um den entsprechenden Code zu schreiben, jedoch sollte es prinzipiell funktionieren.

Man könnte das Ganze sogar noch verfeinern, indem man es Frontendgruppen abhängig macht - nur so als Idee...

Ich werde es in den kommenden Tagen ausprobieren, wenn jemand sich mir anschliesst und bereits vorher zu Ergebnissen kommt, bitte hier posten.
Ειμαστε στη μεση απο κατι...
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Hat das irgendjemand schon mal getestet.
Mir liegt zwar auf der Zunge, warum Du es selbst nicht mal testest (mal abgesehen davon, dass der Code von emergence ist), aber ja, es funktioniert so.

Wenn Du noch ein wenig mehr Energie reinsteckst, kannst Du das sogar abhängig von FrontendUser-Gruppen gestalten, mal im Forum suchen.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Contenider
Beiträge: 503
Registriert: Do 6. Apr 2006, 01:40
Kontaktdaten:

Beitrag von Contenider »

HerrB hat geschrieben:Wenn Du noch ein wenig mehr Energie reinsteckst, kannst Du das sogar abhängig von FrontendUser-Gruppen gestalten, mal im Forum suchen.
Ich würde das gerne machen, wonach muss ich suchen?
Ειμαστε στη μεση απο κατι...
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Nach FrontendGroupMemberCollection. Wenn sich nix findet:

Auf eine bestimmte Gruppe testen:

Code: Alles auswählen

cInclude("classes", "class.frontend.groups.php");

$FEGroupMemberCollection = new FrontendGroupMemberCollection;
$FEGroupMemberCollection->setWhere("idfrontenduser", $auth->auth["uid"]);
$FEGroupMemberCollection->setWhere("idfrontendgroup", <ID der zu prüfenden Gruppe>);
$FEGroupMemberCollection->query();

if ($FEGroupMemberCollection->next())
{
   // ... mach was
}
Bei mehreren Gruppen oder variablen Aktionen:

Code: Alles auswählen

cInclude("classes", "class.frontend.users.php");

$FEUser = new FrontendUser;
$FEUser->loadByPrimaryKey($auth->auth["uid"]);

$aGroups = $FEUser->getGroupsForUser();

foreach ($aGroups as $iGroup)
{
   switch ($iGroup)
   {
       case <Eine Gruppen-ID>:
          // mach was...
          break;
       case <Eine andere Gruppen-ID>:
          // mach was anderes...
          break;
       default:
          // was Du machst, wenn unbekannte Gruppe vorkommt
   }
}
Ungetestet. Ein Test auf Nobody für die uid sollte immer davor stehen (hier nicht dargestellt, siehe oben), um unnötige Datenbankabfragen zu vermeiden.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Contenider
Beiträge: 503
Registriert: Do 6. Apr 2006, 01:40
Kontaktdaten:

Beitrag von Contenider »

Danke, setze mich am WE mal dran
Ειμαστε στη μεση απο κατι...
sherman
Beiträge: 40
Registriert: Mi 29. Nov 2006, 00:44
Kontaktdaten:

Container schützen für Frontenduser

Beitrag von sherman »

Sorry, bin noch absolutes PHP Greenhorn.
Koennte mir vielleicht jemand helfen, das Modul mit dem Code "zu umschliessen"?
Habe mal den Code in das Modul eingefuegt, aber da tut sich gar nichts.

Braeuchte dringend Hilfe vom Forum.

Danke
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Code: Alles auswählen

if ($auth->auth["uid"] != "nobody") {

   cInclude("classes", "class.frontend.groups.php"); 

   $FEGroupMemberCollection = new FrontendGroupMemberCollection; 
   $FEGroupMemberCollection->setWhere("idfrontenduser", $auth->auth["uid"]); 
   $FEGroupMemberCollection->setWhere("idfrontendgroup", <ID der zu  prüfenden Gruppe>); 
   $FEGroupMemberCollection->query(); 

   if ($FEGroupMemberCollection->next()) 
   { 
      // ... mach was
      echo "Abrakadabra";
   }
}
Natürlich passiert nur etwas, wenn
- eine Frontend User-Gruppe angelegt und dessen ID im Modul eingetragen wurde (statt <ID der zu prüfenden Gruppe>).
- ein Frontend User angelegt wurde
- der Frontend User in die Gruppe eingetragen wurde
- die Gruppe zum Zugriff auf die Kategorie berechtigt wurde, in der sich der Artikel mit diesem Modul befindet
- man sich mit dem Frontend User-Account auf der Webseite anmeldet
- und den Artikel aufruft

Unter Tips & Tricks hier im Forum findet sich eine Information zu Frontend User-Gruppen, Frontend Usern, geschützten Kategorien und Authentifizierung, da ist das Vorgehen im Detail erläutert.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
sherman
Beiträge: 40
Registriert: Mi 29. Nov 2006, 00:44
Kontaktdaten:

Beitrag von sherman »

Vielen Dank HerrB!

Hab aber noch ein kleines Problem: Wenn ich den Code in ein Modul einfuege dann leuchtet die rote Laterne und Contenido sagt mir:

Fehler im Modul. Fehlerquelle: eval()'d code on line 9

Ich muss doch noch die query definieren, oder? Mach ich da ne MSQL Abfrage ala SELECT * FROM Frontendgruppe, oder wie habe ich das zu verstehen?

Danke schon mal im Voraus.
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Hast Du denn auch <ID der zu prüfenden Gruppe> komplett durch die ID der Gruppe ersetzt?

Dieser Code funktioniert und enthält nur als Gruppen-ID die 1:

Code: Alles auswählen

if ($auth->auth["uid"] != "nobody") { 

   cInclude("classes", "class.frontend.groups.php"); 

   $FEGroupMemberCollection = new FrontendGroupMemberCollection; 
   $FEGroupMemberCollection->setWhere("idfrontenduser", $auth->auth["uid"]); 
   $FEGroupMemberCollection->setWhere("idfrontendgroup", 1); 
   $FEGroupMemberCollection->query(); 

   if ($FEGroupMemberCollection->next()) 
   { 
      // ... mach was 
      echo "Abrakadabra"; 
   } 
}
Ich muss doch noch die query definieren, oder? Mach ich da ne MSQL Abfrage ala SELECT * FROM Frontendgruppe, oder wie habe ich das zu verstehen?
Nein, das ist ein Beispiel für objektorientierte Programmierung. Die Datenbankabfrage usw. ist in dem setWhere ... query schon drin.

Und das Objekt $FEGroupMemberCollection (beliebige Bezeichnung möglich) repräsentiert als Objekt der Klasse FrontendGroupMemberCollection alle Mitglieder in Gruppen, die definiert sind.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
sherman
Beiträge: 40
Registriert: Mi 29. Nov 2006, 00:44
Kontaktdaten:

Beitrag von sherman »

Klappt super - nur leider zu gut.

Der Container, den ich mit dem Code geschützt habe, wird im Backend nicht angezeigt.
Hab versucht, das Problem zu ¨loesen, in dem ich mich auch als Frontend User angelegt habe, aber funktioniert nicht.

Welche Aenderung muss ich vornehmen, damit ich den Container im Backend bearbeiten kann?

Danke
HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB »

Code: Alles auswählen

if ($FEGroupMemberCollection->next() || $edit) 
   { 
      // ... mach was 
      echo "Abrakadabra"; 
   } 
Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
sherman
Beiträge: 40
Registriert: Mi 29. Nov 2006, 00:44
Kontaktdaten:

Beitrag von sherman »

Super!!!

Danke HerrB, wirklich eine grosse Hilfe.
Gesperrt