MyBB.de Forum
Coppermine-MyBB mit eigenen Benutzergruppen-Rechten - Druckversion

+- MyBB.de Forum (https://www.mybb.de/forum)
+-- Forum: Anpassungen (https://www.mybb.de/forum/forum-47.html)
+--- Forum: Plugin-Diskussionen (https://www.mybb.de/forum/forum-38.html)
+--- Thema: Coppermine-MyBB mit eigenen Benutzergruppen-Rechten (/thread-10757.html)



Coppermine-MyBB mit eigenen Benutzergruppen-Rechten - Bernd S. - 03.09.2008

Hallo, Community,

ich hab' gestern die neueste Version der CPG (V. 1.4.19) inkl. der MyBB-Bridge 1.02 für das aktuell laufende MyBB 1.2.14 meiner Community installiert.
Die Bridge funktioniert auch soweit einwandfrei.
Da ich den bereits erfolgten Tipps hier im Forum folgen konnte, ist auch das Theme inkl. unserer individuellen Hauptnavigation funktionstüchtig (ein paar slide-Menus usw.).

Einzig die Übernahme der Benutzergruppen-Rechte erstellter eigener Benutzergruppen ist ein wenig schwierig.
Um das kurz zu erläutern (grob):
Unsere Community verfügt über einen 3-stufigen Admin-/Moderatoren-Staff (Server-Admin-Trials/Server-Admins/Supermods) und einen 3-stufigen Mitglieder-Status (Gäste-Deaktivierte Accounts/Members/Trusted Members).

Wir beabsichtigen nun von einem kürzlichen europäischen Admin-Treffen eine Bilder-Galerie als Album zu erstellen, zu welchem nur der gesamte Admin-Staff (also alle drei verschiedenen Benutzergruppen dieser Kategorie), nicht aber Mitglieder Zugang haben.

Mein Problem ist, dass ich zwar dank der Bridge nun verschiedenen, einzelnen Gruppen den Zugang zu den entsprechenden Alben erteilen kann, dieser bleibt aber auf diese Gruppen - und auch nur, wenn die zugeordnete MyBB-Benutzergruppe bei den betreffenenden Mitgliedern als primäre Benutzergruppe eingetragen ist - und mich als eingetragener Administrator der CPG beschränkt.

Als Alternative hatte ich versucht, bei allen Zugangsberechtigten der betreffenden Admin-Gruppe als primäre Benutzergruppe den "niedrigsten" Gruppenstatus (Admin-Trial) zuzuordnen. Das funktioniert zwar, dann stehen aber z. B. SuperModeratoren keine Edititions-Optionen für unsere Shoutbox mehr zur Verfügung (die bisweilen doch recht häufig benötigt werden, da die shoutbox stark frequentiert und wir sehr auf die Einhaltung unserer Netiquette bedacht sind), da die shoutbox ihre Editions-Rechte für Shouts ebenfalls vom Eintrag der primären Benutzer-Gruppe abhängig macht.

Meine Frage:
Gibt es eine Möglichkeit mehreren Benutzergruppen via CPG-Steuerung (ggf. über php-code-Modifikation der Bridge) den Zugang zu einem Album zu ermöglichen (hat das ggf. hier schon mal jemand hinbekommen) ?

Und darüber hinaus wüsste ich gern in diesem Zusammenhang weshalb ich z. B. mit einer niederprioritären Benutzergruppe als primären Benutzergruppeneintrag trotz Zuordnung zu einer höherprioritären Benutzer als sekundären Benutzergruppeneintrag z. B. auf diverse Administrationsoptionen wie o. g. Fall nicht zugreifen kann. Ich hatte hier irgendwo im Forum mal gelesen, dass die Benutzergruppenrechte des MyBB derart gestaltet sind, dass generell zugeordnete Benutzergruppen-Rechte eines Users durch nur die Gruppe mit den geringsten Einschränkungen beschränkt sind.
Gibt es da einen Unterschied, ob diese Gruppe mit den geringsten Einschränkungen nun als primäre oder sekundäre Gruppe eingetragen ist ?

Vielen Dank fürs geduldige Lesen, aber noch mehr danke ich schon mal im voraus für (helfende) Antworten !

Greets


RE: Coppermine-MyBB mit eigenen Benutzergruppen-Rechten - Michael - 03.09.2008

Grundsätzlich funktioniert das Rechtesystem des MyBB so: Ein Ja bedeutet Zugang. Beispiel: Ein Benutzer ist in 4 Gruppen und 3 davon dürfen den Kalender nicht aufrufen. Da der Benutzer aber in einer Gruppe ist, die den Kalender aufrufen kann, kann er es auch.

Dass es bei der Galerie und der Shoutbox nicht funktioniert liegt daran, dass hier scheinbar die Berücksichtigung von sekundären Gruppen vergessen wurde. Es handelt sich nicht um einen Fehler im Forum selbst, weshalb du dich an die Autoren der Erweiterungen wenden solltest.


RE: Coppermine-MyBB mit eigenen Benutzergruppen-Rechten - Bernd S. - 04.09.2008

Danke für die Antwort.
So was in der Art dachte ich mir schon.

Bei der Shoutbox ist das ja noch einigermaßen nachvollziehbar, so dass durch einfache Erweiterung der if-Abfragen für bestimmte Administrationsfunktionen im php-Code die dafür zulässigen Benutzergruppen eingefügt werden können.
Bei der MyBB-Bridge habe ich aber leider keinen "Überblick".

Ich hab' mir nun mit einer "Eselsbrücke" geholfen:

- CPG mit aktivierter MyBB-Bridge als eigene Seite (iframe) ins Foren-Theme integriert
- Zugang grundsätzlich nur als registriertes Mitglied
- innerhalb des Foren-Themes Aufruf der Gallerie nur als Mitglied mit erweitertem Status / außerhalb des Forums Zugriff als "normales" Mitglied auf die Gallerie (Kenntnis des vollständigen Pfades zur Gallerie erforderlich) allerdings ohne Upload-Rechte und nur Zugang zu öffentlichen Alben
- "interne" Alben nur mit Übermittlung von Direktlink und PW seitens des Admin-Trials/Admins/Supermods, der es hochgeladen hat

Scheint ganz prima zu funktionieren, da das einmal eingebene Passwort - so es nicht geändert wird - als Cookie gespeichert bleibt (auch innerhalb des Gallerie-iframes, da Gallerie-Cookie und Foren-Cookie separat gespeichert werden).

Mal schauen, wie sich das so entwickelt.
Danke in jedem Fall auch für die Aufklärung.

Greets


RE: Coppermine-MyBB mit eigenen Benutzergruppen-Rechten - gastwirt - 08.05.2009

Die Berücksichtigung der Sekundärgruppen ist durch Änderung/Ergänzung der Bridgedatei mybb.inc.php
möglich.
(getestet mit mybb1.4.6 und coppermine 1.4.21)
*******************************************
PHP-Code:
<?php
/*************************
  Coppermine Photo Gallery
  ************************
  Copyright (c) 2003-2009 Coppermine Dev Team
  v1.1 originally written by Gregory DEMAR

 Multigroup-Modification by E. Kapfenberger http://fotoboard.at

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License version 3
  as published by the Free Software Foundation.
  
  ********************************************
  Coppermine version: 1.4.21
  $HeadURL: https://coppermine.svn.sourceforge.net/svnroot/coppermine/trunk/cpg1.4.x/bridge/mybb.inc.php $
  $Revision: 5728 $
  $Author: gaugau $
  $Date: 2009-03-02 09:25:17 +0100 (Mo, 02 Mär 2009) $
**********************************************/

if (!defined('IN_COPPERMINE')) die('Not in Coppermine...');

// Switch that allows overriding the bridge manager with hard-coded values
define('USE_BRIDGEMGR'1);

require_once 
'bridge/udb_base.inc.php';

class 
cpg_udb extends core_udb {

    function 
cpg_udb()
    {
        global 
$BRIDGE;
        
        if (!
USE_BRIDGEMGR) { // the vars that are used when bridgemgr is disabled

            // URL of your punbb
            
$this->boardurl 'http://localhost/mybb';

            
// local path to your punbb config file
            
require_once('../mybb/inc/config.php');
            
            
$this->use_post_based_groups 1;

        } else { 
// the vars from the bridgemgr
            
$this->boardurl $BRIDGE['full_forum_url'];
            require_once(
$BRIDGE['relative_path_to_config_file'] . 'config.php');
            
$this->use_post_based_groups $BRIDGE['use_post_based_groups'];
        }
        
        
$this->multigroups 1;
        
$this->group_overrride 0;
        
        
// Database connection settings 01.hosting.easyname.eu
        
$this->db = array(
            
'name' => $config['database'] = 'XXX',
            
'host' => $config['hostname'] = 'XXX',
            
'user' => $config['username'] = 'XXX',
            
'password' => $config['password'] = 'XXX',
            
'prefix' =>$config['table_prefix'] = 'XXX'
        
);        
        
// Board table names
        
$this->table = array(
            
'users' => 'users',
            
'groups' => 'usergroups',
            
'sessions' => 'sessions',
        );

        
// Derived full table names
        
$this->usertable '`' $this->db['name'] . '`.' $this->db['prefix'] . $this->table['users'];
        
$this->groupstable =  '`' $this->db['name'] . '`.' $this->db['prefix'] . $this->table['groups'];
        
$this->sessionstable =  '`' $this->db['name'] . '`.' $this->db['prefix'] . $this->table['sessions'];
        
        
// Table field names
        
$this->field = array(
            
'username' => 'username'// name of 'username' field in users table
            
'user_id' => 'uid'// name of 'id' field in users table
            
'password' => 'loginkey'// name of 'password' field in users table
            
'email' => 'email'// name of 'email' field in users table
            
'regdate' => 'regdate'// name of 'registered' field in users table
            
'location' => "''"// name of 'location' field in users table
            
'website' => 'website'// name of 'website' field in users table
            
'usertbl_group_id' => 'usergroup'// name of 'group id' field in users table
            
'grouptbl_group_id' => 'gid'// name of 'group id' field in groups table
            
'grouptbl_group_name' => 'title' // name of 'group name' field in groups table
                
); 
        
        
// Pages to redirect to
        
$this->page = array(
            
'register' => '/member.php?action=register',
            
'editusers' => '/memberlist.php',
            
'edituserprofile' => "/member.php?action=profile&uid="
        
);
        
        
// Group ids
        
$this->admingroups = array(4);
        
$this->guestgroup $this->use_post_based_groups 101 3;
        
        
// Connect to db
        
$this->connect();
    }

    
// definition of how to extract id, name, group from a session cookie
    
function session_extraction()
    {
        if (!isset(
$_COOKIE['sid'])) return false;
    
        
$this->sid addslashes($_COOKIE['sid']);
        
        if (!
$this->sid) return false;
        
        
$this->ipaddress $this->getip();
        
        
$result cpg_db_query("SELECT u.{$this->field['user_id']}, u.{$this->field['password']} FROM {$this->sessionstable} AS s INNER JOIN {$this->usertable} AS u ON u.uid = s.uid WHERE sid='".$this->sid."' AND ip='".$this->ipaddress."'"$this->link_id);
        
        if (!
mysql_num_rows($result)) return false;
        
        
$row mysql_fetch_row($result);

        return 
$row
    }
    
    
// definition of how to extract an id and password hash from a cookie
    
function cookie_extraction()
    {
        return  isset(
$_COOKIE['mybbuser']) ? array_map('addslashes'explode("_"$_COOKIE['mybbuser'], 2)) : false;
    }
    
    
// imported function
    
function getip() {

        if(
$_SERVER['HTTP_X_FORWARDED_FOR'])
        {
            if(
preg_match_all("#[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}#s"$_SERVER['HTTP_X_FORWARDED_FOR'], $addresses))
            {
                while(list(
$key$val) = each($addresses[0]))
                {
                    if(!
preg_match("#^(10|172\.16|192\.168)\.#"$val))
                    {
                        
$ip $val;
                        break;
                    }
                }
            }
        }
        if(!
$ip)
        {
            if(
$_SERVER['HTTP_CLIENT_IP'])
            {
                
$ip $_SERVER['HTTP_CLIENT_IP'];
            }
            else
            {
                
$ip $_SERVER['REMOTE_ADDR'];
            }
        }
        return 
$ip;
    }

    
// definition of actions required to convert a password from user database form to cookie form
    
function udb_hash_db($password)
    {
        return 
$password;
    }
    
    
// Login
    
function login_page()
    {
        
$this->redirect('/member.php?action=login');
    }

    
// Logout
    
function logout_page()
    {
        
$this->redirect('/member.php?action=logout&uid=' USER_ID '&sid=' $this->sid);
    }
    
    function 
view_users()
    {
        if (!
$this->use_post_based_groups$this->redirect($this->page['editusers']);
    }
    
    function 
get_users($options = array())
    {
    }
    
    function 
view_profile($uid)
    {
    }


        function 
get_groups( &$user )
        {
                  
$i $this->use_post_based_groups 100 0;
            
$groups = array($user['group_id'] - $i);
                  
$data = array();
            
$sql "SELECT additionalgroups FROM {$this->usertable} AS u WHERE {$this->field['user_id']}='{$user['id']}' and additionalgroups <> '';";


            
$result cpg_db_query($sql$this->link_id);

            if (
$row mysql_fetch_array($result)){


               
$groups array_merge($groupsexplode(','$row['additionalgroups']));

                  foreach (
$groups as $group){
                       
$data[] = $group+$i;  //appends additionalGroups to the primary group.
                        
}


            }
            
            
mysql_free_result($result);

            return 
$data;
        }
        




}

// and go !
$cpg_udb = new cpg_udb;
?>

*******************************************