aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/docs/auth_api.html
blob: 8f86ae27404117bc2553ef4acbc51603018c0dc4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Auth API</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta name="resource-type" content="document" />
<meta name="description" lang="en" content="Olympus coding guidelines document" />
<meta name="keywords" lang="en" content="" />
<meta name="author" content="phpBB Group" />
<meta name="copyright" content="phpBB Group" />
<meta name="MSSmartTagsPreventParsing" content="true" />
<link rel="shortcut icon" href="" />

<style type="text/css">
<!--

/*
	    The original "subSilver" theme for phpBB2
	Created by subBlue design :: http://www.subBlue.com
*/

body {
	background-color:	white;
	font-family:		Verdana, Arial, Helvetica, sans-serif;
	margin:				0px;
	border:				0px;
	padding:			0px;
}

img {
	border: 0;
}

p {
	font-size:	8pt;
}

hr { 
	height: 0px; 
	border: solid #D1D7DC 0px; 
	border-top-width: 1px;
}

#title, h1 {
	font: bold 18pt 'Trebuchet MS', Verdana, sans-serif;
	text-decoration: none; 
	line-height: 120%; 
}

h2 {
	font: bold 12pt Arial, Helvetica, sans-serif;
	text-decoration: none; 
	line-height: 120%; 
}

h3 {
	font: bold 10pt Arial, Helvetica, sans-serif;
	text-decoration: none; 
	line-height: 120%; 
}

.paragraph {
	margin-left: 20px;
}

/* 
	Structure 
*/
#logo {
	background: #fff url(header_bg.jpg) repeat-x top right;
	height: 60px;
}

#title {
	color: #12749b;
	float: right;
	margin: 10px 10px 0;
}

#main {
	margin-left: 25px;
	margin-right: 25px;
}

.good {
	color: green;
}

.bad {
	color: red;
}

#footer {
	margin-left: 75px;
	font-size: 70%;
	color: #006600;
}

code { 
	color: #006600; 
	font-weight: normal; 
	font-family: 'Courier New', monospace; 
	border-color: #D1D7DC; 
	border-width: 1px; 
	border-style: solid; 
	background-color: #FAFAFA; 
}

.indent p {
	padding-left: 20px;
	font-size: 90%;
}

/*
	Anchors
*/
a {
	font-size: 70%;
}

a:link, a:active, a:visited {
	color:	#006699;
	text-decoration:	none;
}

a:hover {
	color:				#DD6900;
	text-decoration:	underline;
}

a.nav {
	color:				#006699;
	text-decoration:	none;
}

a.nav:hover {
	text-decoration:	underline;
}

p a {
	font-size: 100%;
}

.menu {
	font-size: 80%;
}

.menu li a {
	font-size: 100%;
}
//-->
</style>

<!--[if IE]>
<style type="text/css">
body {
	scrollbar-face-color:		#DEE3E7;
	scrollbar-highlight-color:	white;
	scrollbar-shadow-color:		#DEE3E7;
	scrollbar-3dlight-color:	#D1D7DC;
	scrollbar-arrow-color:		#006699;
	scrollbar-track-color:		#EFEFEF;
	scrollbar-darkshadow-color: #98AAB1;
}
</style>
<![endif]-->

</head>

<body>

<div id="logo">
	<div id="title">Auth API</div>
	<a href="index.php"><img src="header_left.jpg" alt="phpBB Logo" /></a>
</div>

<a name="top"></a><div id="main">

<p>This is an explanation of how to use the phpBB auth/acl API. This document is (c) 2006 phpBB Group, copying or redistribution is not allowed without permission.</p>

<h1>Auth API</h1>

<ol class="menu">
	<li><a href="#intro">Introduction</a></li>
	<li><a href="#methods">Methods</a>
	<ol type="i">
		<li><a href="#acl">acl</a></li>
		<li><a href="#acl_get">acl_get</a></li>
		<li><a href="#acl_gets">acl_gets</a></li>
		<li><a href="#acl_getf">acl_getf</a></li>
		<li><a href="#acl_getf_global">acl_getf_global</a></li>
		<li><a href="#acl_cache">acl_cache</a></li>
	</ol>
	</li>
	<li><a href="#admin_related">Admin related functions</a></li>
</ol>

<hr />

<a name="intro"></a><h1>1. Introduction</h1>

	<div class="paragraph">

	<h3>What is it?</h3>

	<p>The <code>auth</code> class contains methods related to authorisation users to access various board functions, e.g. posting, viewing, replying, logging in (and out), etc. If you need to check whether a user can carry out a task or handle user login/logouts this class is required.</p>

	<h3>Initialisation</h3>

	<p>To use any methods contained with the <code>auth</code> class it first needs to be instantiated. This is best achieved early in the execution of the script in the following manner:</p>

	<blockquote><pre>
$auth = new auth();
	</pre></blockquote>

	<p>Once an instance of the class has been created you are free to call the various methods it contains. Please note that should you wish to use the <code>auth_admin</code> methods you will need to instantiate this separately but in the same way.</p>

	</div>
	<a href="#top">Top</a>
	<br /><br />

<hr />

<a name="methods"></a><h1>2. Methods</h1>

	<p>Following are the methods you are able to use.</p>

	<a name="acl"></a><b>2.i. acl</b>
	<br /><br />
	<div class="paragraph">
	
	<p>The <code>acl</code> method is the initialisation routine for all the acl functions. If you intend calling any acl method you must first call this. The method takes as its one and only required parameter an associative array containing user information as stored in the database. This array must contain at least the following information; user_id, user_permissions and user_type. It is called in the following way:</p>

	<blockquote><pre>
$auth-&gt;acl(<code>userdata</code>);
	</pre></blockquote>

	<p>Where userdata is the array containing the aforementioned data.</p>

	</div>
	<a href="#top">Top</a>
	<br /><br />


	<a name="acl_get"></a><b>2.ii. acl_get</b>
	<br /><br />
	<div class="paragraph">

	<p>This method is the primary way of determining what a user can and cannot do for a given option globally or in a given forum. The method should be called in the following way:</p>

	<blockquote><pre>
$result = $auth-&gt;acl_get(<code>option</code>[, <code>forum</code>]);
	</pre></blockquote>

	<p>Where option is a string representing the required option, e.g. 'f_list', 'm_edit', 'a_adduser', etc. By adding a ! in front of the option, e.g. '!f_list' the result of this method will be negated. The optional forum term is the integer forum_id.</p>

	<p>The method returns a positive integer when the user is allowed to carry out the option and a zero if denied or the other way around if the option is prefixed with an exclamation mark.</p>

	<p>If you specify a forum and there is also a global setting for the specified option then this method will return a positive integer if one of them evaluates to a positive integer. An example would be the m_approve option which can be set per forum but also globally. If a user has the global option he will automatically have m_approve in every forum.</p>

	<p>There are some special options or <em>flags</em> which are used as prefixes for other options, e.g. 'f_' or 'm_'. These flags will automatically be set to a positive integer if the user has one or more permissions with the given prefix. A local setting will result in the flag being set only locally (so it will require a forum id to retrieve). If a user has one or more global permissions with the prefix acl_get will return a positive integer regardless of the forum id.</p>

	</div>
	<a href="#top">Top</a>
	<br /><br />


	<a name="acl_gets"></a><b>2.iii. acl_gets</b>
	<br /><br />
	<div class="paragraph">

	<p>This method is funtionally similar to <code>acl_get</code> in that it returns information on whether a user can or cannot carry out a given task. The difference here is the ability to test several different options in one go. This may be useful for testing whether a user is a moderator or an admin in one call. Rather than having to call and check <code>acl_get</code> twice.</p>

	<p>The method should be called thus:</p>

	<blockquote><pre>
$result = $auth-&gt;acl_gets(<code>option1</code>[, <code>option2</code>, ..., <code>optionN</code>, <code>forum</code>]);
	</pre></blockquote>

	<p>As with the <code>acl_get</code> method the options are strings representing the required permissions to check. The forum again is an integer representing a given forum_id.</p>

	<p>The method will return a positive integer if <code>acl_get</code> for one of the options evaluates to a positive integer (combines permissions with OR).</p>

	</div>
	<a href="#top">Top</a>
	<br /><br />


	<a name="acl_getf"></a><b>2.iv. acl_getf</b>
	<br /><br />
	<div class="paragraph">

	<p>This method is used to find out in which forums a user is allowed to carry out an operation or to find out in which forums he is not allowed to carry out an operation. The method should be called in the following way:</p>

	<blockquote><pre>
$result = $auth-&gt;acl_getf(<code>option</code>[, <code>clean</code>]);
	</pre></blockquote>

	<p>Just like in the <code>acl_get</code> method the option is a string specifying the permission which has to be checked (negation using ! is allowed). The second parameter is a boolean. If it is set to false this method returns all forums with either zero or a positive integer. If it is set to true only those forums with a positive integer as the result will be returned.</p>

	<p>The method returns an associative array of the form:</p>

	<blockquote><pre>
array(<em>forum_id1</em> =&gt; array(<em>option</em> =&gt; <em>integer</em>), <em>forum_id2</em> =&gt; ...)
	</pre></blockquote>

	<p>Where option is the option passed to the method and integer is either zero or a positive integer and the same <code>acl_get(option, forum_id)</code> would return.</p>

	</div>
	<a href="#top">Top</a>
	<br /><br />


	<a name="acl_getf_global"></a><b>2.v. acl_getf_global</b>
	<br /><br />
	<div class="paragraph">

	<p>This method is used to find out whether a user has a permission in at least one forum or globally. This method is similar to checking whether <code>acl_getf(option, true)</code> returned one or more forums but it's faster. It should be called in the following way:</p>

	<blockquote><pre>
$result = acl_getf_global(<code>option</code>)
	</pre></blockquote>

	<p>As with the previous methods option is a string specifying the permission which has to be checked.</p>

	<p>This method returns either zero or a positive integer.</p>

	</div>
	<a href="#top">Top</a>
	<br /><br />


	<a name="acl_cache"></a><b>2.vi. acl_cache</b>
	<br /><br />
	<div class="paragraph">

	<p>This should be considered a private method and not be called externally. It handles the generation of the user_permissions data from the basic user and group authorisation data. When necessary this method is called automatically by <code>acl</code>.</p>

	</div>
	<a href="#top">Top</a>
	<br /><br />

<hr />

<a name="admin_related"></a><h1>3. Admin related functions</h1>

	<div class="paragraph">

	<p>A number of additional methods are available related to <code>auth</code>. These handle more basic functions such as adding user and group permissions, new options and clearing the user cache. These methods are contained within a separate class, <code>auth_admin</code>. This can be found in <code>includes/acp/auth.php</code>.</p>

	<p>To use any methods this class contains it first needs to be instantiated separately from <code>auth</code>. This is achieved in the same way as <code>auth</code>:</p>

	<blockquote><pre>
$auth_admin = new auth_admin();
	</pre></blockquote>

	<p>This instance gives you access to both the methods of this specific class and that of <code>auth</code>.</p>

	</div>
	<a href="#top">Top</a>

</div>

<div id="footer"> $Id$ 
<br /><br />
</div>

</body>
</html>