(file) Return to auth.php CVS log (file) (dir) Up to [RizwankCVS] / geekymedia_web / phpBB2 / includes

  1 rizwank 1.1 <?php
  2             /***************************************************************************
  3              *                                 auth.php
  4              *                            -------------------                         
  5              *   begin                : Saturday, Feb 13, 2001 
  6              *   copyright            : (C) 2001 The phpBB Group        
  7              *   email                : support@phpbb.com                           
  8              *                                                          
  9              *   $Id: auth.php,v 1.37.2.2 2002/12/22 18:46:26 psotfx Exp $                                                           
 10              *                                                            
 11              * 
 12              ***************************************************************************/ 
 13             
 14             /***************************************************************************
 15              *
 16              *   This program is free software; you can redistribute it and/or modify
 17              *   it under the terms of the GNU General Public License as published by
 18              *   the Free Software Foundation; either version 2 of the License, or
 19              *   (at your option) any later version.
 20              *
 21              ***************************************************************************/
 22 rizwank 1.1 
 23             /*
 24             	$type's accepted (pre-pend with AUTH_):
 25             	VIEW, READ, POST, REPLY, EDIT, DELETE, STICKY, ANNOUNCE, VOTE, POLLCREATE
 26             
 27             	Possible options ($type/forum_id combinations):
 28             
 29             	* If you include a type and forum_id then a specific lookup will be done and
 30             	the single result returned
 31             
 32             	* If you set type to AUTH_ALL and specify a forum_id an array of all auth types
 33             	will be returned
 34             
 35             	* If you provide a forum_id a specific lookup on that forum will be done
 36             
 37             	* If you set forum_id to AUTH_LIST_ALL and specify a type an array listing the
 38             	results for all forums will be returned
 39             
 40             	* If you set forum_id to AUTH_LIST_ALL and type to AUTH_ALL a multidimensional
 41             	array containing the auth permissions for all types and all forums for that
 42             	user is returned
 43 rizwank 1.1 
 44             	All results are returned as associative arrays, even when a single auth type is
 45             	specified.
 46             
 47             	If available you can send an array (either one or two dimensional) containing the
 48             	forum auth levels, this will prevent the auth function having to do its own
 49             	lookup
 50             */
 51             function auth($type, $forum_id, $userdata, $f_access = '')
 52             {
 53             	global $db, $lang;
 54             
 55             	switch( $type )
 56             	{
 57             		case AUTH_ALL:
 58             			$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';
 59             			$auth_fields = array('auth_view', 'auth_read', 'auth_post', 'auth_reply', 'auth_edit', 'auth_delete', 'auth_sticky', 'auth_announce', 'auth_vote', 'auth_pollcreate');
 60             			break;
 61             
 62             		case AUTH_VIEW:
 63             			$a_sql = 'a.auth_view';
 64 rizwank 1.1 			$auth_fields = array('auth_view');
 65             			break;
 66             
 67             		case AUTH_READ:
 68             			$a_sql = 'a.auth_read';
 69             			$auth_fields = array('auth_read');
 70             			break;
 71             		case AUTH_POST:
 72             			$a_sql = 'a.auth_post';
 73             			$auth_fields = array('auth_post');
 74             			break;
 75             		case AUTH_REPLY:
 76             			$a_sql = 'a.auth_reply';
 77             			$auth_fields = array('auth_reply');
 78             			break;
 79             		case AUTH_EDIT:
 80             			$a_sql = 'a.auth_edit';
 81             			$auth_fields = array('auth_edit');
 82             			break;
 83             		case AUTH_DELETE:
 84             			$a_sql = 'a.auth_delete';
 85 rizwank 1.1 			$auth_fields = array('auth_delete');
 86             			break;
 87             
 88             		case AUTH_ANNOUNCE:
 89             			$a_sql = 'a.auth_announce';
 90             			$auth_fields = array('auth_announce');
 91             			break;
 92             		case AUTH_STICKY:
 93             			$a_sql = 'a.auth_sticky';
 94             			$auth_fields = array('auth_sticky');
 95             			break;
 96             
 97             		case AUTH_POLLCREATE:
 98             			$a_sql = 'a.auth_pollcreate';
 99             			$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 rizwank 1.1 			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 rizwank 1.1 
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             
136             		$db->sql_freeresult($result);
137             	}
138             
139             	//
140             	// If the user isn't logged on then all we need do is check if the forum
141             	// has the type set to ALL, if yes they are good to go, if not then they
142             	// are denied access
143             	//
144             	$u_access = array();
145             	if ( $userdata['session_logged_in'] )
146             	{
147             		$forum_match_sql = ( $forum_id != AUTH_LIST_ALL ) ? "AND a.forum_id = $forum_id" : '';
148 rizwank 1.1 
149             		$sql = "SELECT a.forum_id, $a_sql, a.auth_mod 
150             			FROM " . AUTH_ACCESS_TABLE . " a, " . USER_GROUP_TABLE . " ug 
151             			WHERE ug.user_id = ".$userdata['user_id']. " 
152             				AND ug.user_pending = 0 
153             				AND a.group_id = ug.group_id
154             				$forum_match_sql";
155             		if ( !($result = $db->sql_query($sql)) )
156             		{
157             			message_die(GENERAL_ERROR, 'Failed obtaining forum access control lists', '', __LINE__, __FILE__, $sql);
158             		}
159             
160             		if ( $row = $db->sql_fetchrow($result) )
161             		{
162             			do
163             			{
164             				if ( $forum_id != AUTH_LIST_ALL)
165             				{
166             					$u_access[] = $row;
167             				}
168             				else
169 rizwank 1.1 				{
170             					$u_access[$row['forum_id']][] = $row;
171             				}
172             			}
173             			while( $row = $db->sql_fetchrow($result) );
174             		}
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 rizwank 1.1 		//
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 rizwank 1.1 				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 rizwank 1.1 		{
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             
238             				switch( $value )
239             				{
240             					case AUTH_ALL:
241             						$auth_user[$f_forum_id][$key] = TRUE;
242             						$auth_user[$f_forum_id][$key . '_type'] = $lang['Auth_Anonymous_users'];
243             						break;
244             
245             					case AUTH_REG:
246             						$auth_user[$f_forum_id][$key] = ( $userdata['session_logged_in'] ) ? TRUE : 0;
247             						$auth_user[$f_forum_id][$key . '_type'] = $lang['Auth_Registered_Users'];
248             						break;
249             
250             					case AUTH_ACL:
251             						$auth_user[$f_forum_id][$key] = ( $userdata['session_logged_in'] ) ? auth_check_user(AUTH_ACL, $key, $u_access[$f_forum_id], $is_admin) : 0;
252             						$auth_user[$f_forum_id][$key . '_type'] = $lang['Auth_Users_granted_access'];
253 rizwank 1.1 						break;
254             
255             					case AUTH_MOD:
256             						$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;
257             						$auth_user[$f_forum_id][$key . '_type'] = $lang['Auth_Moderators'];
258             						break;
259             
260             					case AUTH_ADMIN:
261             						$auth_user[$f_forum_id][$key] = $is_admin;
262             						$auth_user[$f_forum_id][$key . '_type'] = $lang['Auth_Administrators'];
263             						break;
264             
265             					default:
266             						$auth_user[$f_forum_id][$key] = 0;
267             						break;
268             				}
269             			}
270             		}
271             	}
272             
273             	//
274 rizwank 1.1 	// Is user a moderator?
275             	//
276             	if ( $forum_id != AUTH_LIST_ALL )
277             	{
278             		$auth_user['auth_mod'] = ( $userdata['session_logged_in'] ) ? auth_check_user(AUTH_MOD, 'auth_mod', $u_access, $is_admin) : 0;
279             	}
280             	else
281             	{
282             		for($k = 0; $k < count($f_access); $k++)
283             		{
284             			$f_forum_id = $f_access[$k]['forum_id'];
285             
286             			$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;
287             		}
288             	}
289             
290             	return $auth_user;
291             }
292             
293             function auth_check_user($type, $key, $u_access, $is_admin)
294             {
295 rizwank 1.1 	$auth_user = 0;
296             
297             	if ( count($u_access) )
298             	{
299             		for($j = 0; $j < count($u_access); $j++)
300             		{
301             			$result = 0;
302             			switch($type)
303             			{
304             				case AUTH_ACL:
305             					$result = $u_access[$j][$key];
306             
307             				case AUTH_MOD:
308             					$result = $result || $u_access[$j]['auth_mod'];
309             
310             				case AUTH_ADMIN:
311             					$result = $result || $is_admin;
312             					break;
313             			}
314             
315             			$auth_user = $auth_user || $result;
316 rizwank 1.1 		}
317             	}
318             	else
319             	{
320             		$auth_user = $is_admin;
321             	}
322             
323             	return $auth_user;
324             }
325             
326             ?>

Rizwan Kassim
Powered by
ViewCVS 0.9.2