Verzeichnisstruktur phpBB-2.0.0


Veröffentlicht
03.04.2002

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

auth.php

Zuletzt modifiziert: 09.10.2024, 12:51 - Dateigröße: 9.44 KiB


 001  <?php
 002  /***************************************************************************
 003   *                                 auth.php
 004   *                            -------------------                         
 005   *   begin                : Saturday, Feb 13, 2001 
 006   *   copyright            : (C) 2001 The phpBB Group        
 007   *   email                : support@phpbb.com                           
 008   *                                                          
 009   *   $Id$                                                           
 010   *                                                            
 011   * 
 012   ***************************************************************************/ 
 013   
 014  /***************************************************************************
 015   *
 016   *   This program is free software; you can redistribute it and/or modify
 017   *   it under the terms of the GNU General Public License as published by
 018   *   the Free Software Foundation; either version 2 of the License, or
 019   *   (at your option) any later version.
 020   *
 021   ***************************************************************************/
 022   
 023  /*
 024      $type's accepted (pre-pend with AUTH_):
 025      VIEW, READ, POST, REPLY, EDIT, DELETE, STICKY, ANNOUNCE, VOTE, POLLCREATE
 026   
 027      Possible options ($type/forum_id combinations):
 028   
 029      * If you include a type and forum_id then a specific lookup will be done and
 030      the single result returned
 031   
 032      * If you set type to AUTH_ALL and specify a forum_id an array of all auth types
 033      will be returned
 034   
 035      * If you provide a forum_id a specific lookup on that forum will be done
 036   
 037      * If you set forum_id to AUTH_LIST_ALL and specify a type an array listing the
 038      results for all forums will be returned
 039   
 040      * If you set forum_id to AUTH_LIST_ALL and type to AUTH_ALL a multidimensional
 041      array containing the auth permissions for all types and all forums for that
 042      user is returned
 043   
 044      All results are returned as associative arrays, even when a single auth type is
 045      specified.
 046   
 047      If available you can send an array (either one or two dimensional) containing the
 048      forum auth levels, this will prevent the auth function having to do its own
 049      lookup
 050  */
 051  function auth($type, $forum_id, $userdata, $f_access = '')
 052  {
 053      global $db, $lang;
 054   
 055      switch( $type )
 056      {
 057          case AUTH_ALL:
 058              $a_sql = 'a.auth_view, a.auth_read, a.auth_post, a.auth_reply, a.auth_edit, a.auth_delete, a.auth_sticky, a.auth_announce, a.auth_vote, a.auth_pollcreate';
 059              $auth_fields = array('auth_view', 'auth_read', 'auth_post', 'auth_reply', 'auth_edit', 'auth_delete', 'auth_sticky', 'auth_announce', 'auth_vote', 'auth_pollcreate');
 060              break;
 061   
 062          case AUTH_VIEW:
 063              $a_sql = 'a.auth_view';
 064              $auth_fields = array('auth_view');
 065              break;
 066   
 067          case AUTH_READ:
 068              $a_sql = 'a.auth_read';
 069              $auth_fields = array('auth_read');
 070              break;
 071          case AUTH_POST:
 072              $a_sql = 'a.auth_post';
 073              $auth_fields = array('auth_post');
 074              break;
 075          case AUTH_REPLY:
 076              $a_sql = 'a.auth_reply';
 077              $auth_fields = array('auth_reply');
 078              break;
 079          case AUTH_EDIT:
 080              $a_sql = 'a.auth_edit';
 081              $auth_fields = array('auth_edit');
 082              break;
 083          case AUTH_DELETE:
 084              $a_sql = 'a.auth_delete';
 085              $auth_fields = array('auth_delete');
 086              break;
 087   
 088          case AUTH_ANNOUNCE:
 089              $a_sql = 'a.auth_announce';
 090              $auth_fields = array('auth_announce');
 091              break;
 092          case AUTH_STICKY:
 093              $a_sql = 'a.auth_sticky';
 094              $auth_fields = array('auth_sticky');
 095              break;
 096   
 097          case AUTH_POLLCREATE:
 098              $a_sql = 'a.auth_pollcreate';
 099              $auth_fields = array('auth_pollcreate');
 100              break;
 101          case AUTH_VOTE:
 102              $a_sql = 'a.auth_vote';
 103              $auth_fields = array('auth_vote');
 104              break;
 105          case AUTH_ATTACH:
 106              break;
 107   
 108          default:
 109              break;
 110      }
 111   
 112      //
 113      // If f_access has been passed, or auth is needed to return an array of forums
 114      // then we need to pull the auth information on the given forum (or all forums)
 115      //
 116      if ( empty($f_access) )
 117      {
 118          $forum_match_sql = ( $forum_id != AUTH_LIST_ALL ) ? "WHERE a.forum_id = $forum_id" : '';
 119   
 120          $sql = "SELECT a.forum_id, $a_sql
 121              FROM " . FORUMS_TABLE . " a
 122              $forum_match_sql";
 123          if ( !($result = $db->sql_query($sql)) )
 124          {
 125              message_die(GENERAL_ERROR, 'Failed obtaining forum access control lists', '', __LINE__, __FILE__, $sql);
 126          }
 127   
 128          $sql_fetchrow = ( $forum_id != AUTH_LIST_ALL ) ? 'sql_fetchrow' : 'sql_fetchrowset';
 129   
 130          if ( !($f_access = $db->$sql_fetchrow($result)) )
 131          {
 132              $db->sql_freeresult($result);
 133              return array();
 134          }
 135          $db->sql_freeresult($result);
 136      }
 137   
 138      //
 139      // If the user isn't logged on then all we need do is check if the forum
 140      // has the type set to ALL, if yes they are good to go, if not then they
 141      // are denied access
 142      //
 143      $u_access = array();
 144      if ( $userdata['session_logged_in'] )
 145      {
 146          $forum_match_sql = ( $forum_id != AUTH_LIST_ALL ) ? "AND a.forum_id = $forum_id" : '';
 147   
 148          $sql = "SELECT a.forum_id, $a_sql, a.auth_mod 
 149              FROM " . AUTH_ACCESS_TABLE . " a, " . USER_GROUP_TABLE . " ug 
 150              WHERE ug.user_id = ".$userdata['user_id']. " 
 151                  AND ug.user_pending = 0 
 152                  AND a.group_id = ug.group_id
 153                  $forum_match_sql";
 154          if ( !($result = $db->sql_query($sql)) )
 155          {
 156              message_die(GENERAL_ERROR, 'Failed obtaining forum access control lists', '', __LINE__, __FILE__, $sql);
 157          }
 158   
 159          if ( $row = $db->sql_fetchrow($result) )
 160          {
 161              do
 162              {
 163                  if ( $forum_id != AUTH_LIST_ALL)
 164                  {
 165                      $u_access[] = $row;
 166                  }
 167                  else
 168                  {
 169                      $u_access[$row['forum_id']][] = $row;
 170                  }
 171              }
 172              while( $row = $db->sql_fetchrow($result) );
 173          }
 174          $db->sql_freeresult($result);
 175      }
 176   
 177      $is_admin = ( $userdata['user_level'] == ADMIN && $userdata['session_logged_in'] ) ? TRUE : 0;
 178   
 179      $auth_user = array();
 180      for($i = 0; $i < count($auth_fields); $i++)
 181      {
 182          $key = $auth_fields[$i];
 183   
 184          //
 185          // If the user is logged on and the forum type is either ALL or REG then the user has access
 186          //
 187          // If the type if ACL, MOD or ADMIN then we need to see if the user has specific permissions
 188          // to do whatever it is they want to do ... to do this we pull relevant information for the
 189          // user (and any groups they belong to)
 190          //
 191          // Now we compare the users access level against the forums. We assume here that a moderator
 192          // and admin automatically have access to an ACL forum, similarly we assume admins meet an
 193          // auth requirement of MOD
 194          //
 195          if ( $forum_id != AUTH_LIST_ALL )
 196          {
 197              $value = $f_access[$key];
 198   
 199              switch( $value )
 200              {
 201                  case AUTH_ALL:
 202                      $auth_user[$key] = TRUE;
 203                      $auth_user[$key . '_type'] = $lang['Auth_Anonymous_Users'];
 204                      break;
 205   
 206                  case AUTH_REG:
 207                      $auth_user[$key] = ( $userdata['session_logged_in'] ) ? TRUE : 0;
 208                      $auth_user[$key . '_type'] = $lang['Auth_Registered_Users'];
 209                      break;
 210   
 211                  case AUTH_ACL:
 212                      $auth_user[$key] = ( $userdata['session_logged_in'] ) ? auth_check_user(AUTH_ACL, $key, $u_access, $is_admin) : 0;
 213                      $auth_user[$key . '_type'] = $lang['Auth_Users_granted_access'];
 214                      break;
 215   
 216                  case AUTH_MOD:
 217                      $auth_user[$key] = ( $userdata['session_logged_in'] ) ? auth_check_user(AUTH_MOD, 'auth_mod', $u_access, $is_admin) : 0;
 218                      $auth_user[$key . '_type'] = $lang['Auth_Moderators'];
 219                      break;
 220   
 221                  case AUTH_ADMIN:
 222                      $auth_user[$key] = $is_admin;
 223                      $auth_user[$key . '_type'] = $lang['Auth_Administrators'];
 224                      break;
 225   
 226                  default:
 227                      $auth_user[$key] = 0;
 228                      break;
 229              }
 230          }
 231          else
 232          {
 233              for($k = 0; $k < count($f_access); $k++)
 234              {
 235                  $value = $f_access[$k][$key];
 236                  $f_forum_id = $f_access[$k]['forum_id'];
 237                  $u_access[$f_forum_id] = isset($u_access[$f_forum_id]) ? $u_access[$f_forum_id] : array();
 238   
 239                  switch( $value )
 240                  {
 241                      case AUTH_ALL:
 242                          $auth_user[$f_forum_id][$key] = TRUE;
 243                          $auth_user[$f_forum_id][$key . '_type'] = $lang['Auth_Anonymous_Users'];
 244                          break;
 245   
 246                      case AUTH_REG:
 247                          $auth_user[$f_forum_id][$key] = ( $userdata['session_logged_in'] ) ? TRUE : 0;
 248                          $auth_user[$f_forum_id][$key . '_type'] = $lang['Auth_Registered_Users'];
 249                          break;
 250   
 251                      case AUTH_ACL:
 252                          $auth_user[$f_forum_id][$key] = ( $userdata['session_logged_in'] ) ? auth_check_user(AUTH_ACL, $key, $u_access[$f_forum_id], $is_admin) : 0;
 253                          $auth_user[$f_forum_id][$key . '_type'] = $lang['Auth_Users_granted_access'];
 254                          break;
 255   
 256                      case AUTH_MOD:
 257                          $auth_user[$f_forum_id][$key] = ( $userdata['session_logged_in'] ) ? auth_check_user(AUTH_MOD, 'auth_mod', $u_access[$f_forum_id], $is_admin) : 0;
 258                          $auth_user[$f_forum_id][$key . '_type'] = $lang['Auth_Moderators'];
 259                          break;
 260   
 261                      case AUTH_ADMIN:
 262                          $auth_user[$f_forum_id][$key] = $is_admin;
 263                          $auth_user[$f_forum_id][$key . '_type'] = $lang['Auth_Administrators'];
 264                          break;
 265   
 266                      default:
 267                          $auth_user[$f_forum_id][$key] = 0;
 268                          break;
 269                  }
 270              }
 271          }
 272      }
 273   
 274      //
 275      // Is user a moderator?
 276      //
 277      if ( $forum_id != AUTH_LIST_ALL )
 278      {
 279          $auth_user['auth_mod'] = ( $userdata['session_logged_in'] ) ? auth_check_user(AUTH_MOD, 'auth_mod', $u_access, $is_admin) : 0;
 280      }
 281      else
 282      {
 283          for($k = 0; $k < count($f_access); $k++)
 284          {
 285              $f_forum_id = $f_access[$k]['forum_id'];
 286              $u_access[$f_forum_id] = isset($u_access[$f_forum_id]) ? $u_access[$f_forum_id] : array();
 287   
 288              $auth_user[$f_forum_id]['auth_mod'] = ( $userdata['session_logged_in'] ) ? auth_check_user(AUTH_MOD, 'auth_mod', $u_access[$f_forum_id], $is_admin) : 0;
 289          }
 290      }
 291   
 292      return $auth_user;
 293  }
 294   
 295  function auth_check_user($type, $key, $u_access, $is_admin)
 296  {
 297      $auth_user = 0;
 298   
 299      if ( count($u_access) )
 300      {
 301          for($j = 0; $j < count($u_access); $j++)
 302          {
 303              $result = 0;
 304              switch($type)
 305              {
 306                  case AUTH_ACL:
 307                      $result = $u_access[$j][$key];
 308   
 309                  case AUTH_MOD:
 310                      $result = $result || $u_access[$j]['auth_mod'];
 311   
 312                  case AUTH_ADMIN:
 313                      $result = $result || $is_admin;
 314                      break;
 315              }
 316   
 317              $auth_user = $auth_user || $result;
 318          }
 319      }
 320      else
 321      {
 322          $auth_user = $is_admin;
 323      }
 324   
 325      return $auth_user;
 326  }
 327   
 328  ?>