Project

General

Profile

Download (15.1 KB) Statistics
| Branch: | Tag: | Revision:
1 d88c6a9f Scott Ullrich
<?php 
2 fab7ff44 Bill Marquette
/*
3 d88c6a9f Scott Ullrich
	$Id: system_groupmanager.php 
4
	part of m0n0wall (http://m0n0.ch/wall)
5
6 6b07c15a Matthew Grooms
	Copyright (C) 2008 Shrew Soft Inc.
7
	All rights reserved. 
8
9 d88c6a9f Scott Ullrich
	Copyright (C) 2005 Paul Taylor <paultaylor@winn-dixie.com>.
10
	All rights reserved. 
11
12
	Copyright (C) 2003-2005 Manuel Kasper <mk@neon1.net>.
13
	All rights reserved.
14
	
15
	Redistribution and use in source and binary forms, with or without
16
	modification, are permitted provided that the following conditions are met:
17
	
18
	1. Redistributions of source code must retain the above copyright notice,
19
	   this list of conditions and the following disclaimer.
20
	
21
	2. Redistributions in binary form must reproduce the above copyright
22
	   notice, this list of conditions and the following disclaimer in the
23
	   documentation and/or other materials provided with the distribution.
24
	
25
	THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
26
	INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
27
	AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28
	AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
29
	OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30
	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31
	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32
	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33
	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34
	POSSIBILITY OF SUCH DAMAGE.
35 fab7ff44 Bill Marquette
*/
36 1d333258 Scott Ullrich
/*
37
	pfSense_MODULE:	auth
38
*/
39 fab7ff44 Bill Marquette
40 6b07c15a Matthew Grooms
##|+PRIV
41
##|*IDENT=page-system-groupmanager
42
##|*NAME=System: Group manager page
43
##|*DESCR=Allow access to the 'System: Group manager' page.
44
##|*MATCH=system_groupmanager.php*
45
##|-PRIV
46 fab7ff44 Bill Marquette
47 3fa86ecd sullrich
require("guiconfig.inc");
48 d88c6a9f Scott Ullrich
49 bbf825ab Vinicius Coque
$pgtitle = array(gettext("System"), gettext("Group manager"));
50 fab7ff44 Bill Marquette
51 6b07c15a Matthew Grooms
if (!is_array($config['system']['group']))
52
	$config['system']['group'] = array();
53 d81c2ad1 Scott Ullrich
54 6b07c15a Matthew Grooms
$a_group = &$config['system']['group'];
55 d81c2ad1 Scott Ullrich
56 6b07c15a Matthew Grooms
$id = $_GET['id'];
57
if (isset($_POST['id']))
58
	$id = $_POST['id'];
59 d81c2ad1 Scott Ullrich
60 6b07c15a Matthew Grooms
if ($_GET['act'] == "delgroup") {
61 31b53653 Scott Ullrich
62 6b07c15a Matthew Grooms
	if (!$a_group[$_GET['id']]) {
63
		pfSenseHeader("system_groupmanager.php");
64
		exit;
65
	}
66 31b53653 Scott Ullrich
67 659fa7f2 Matthew Grooms
	local_group_del($a_group[$_GET['id']]);
68 6b07c15a Matthew Grooms
	$groupdeleted = $a_group[$_GET['id']]['name'];
69
	unset($a_group[$_GET['id']]);
70
	write_config();
71
	$savemsg = gettext("Group")." {$groupdeleted} ".
72
				gettext("successfully deleted")."<br/>";
73 fab7ff44 Bill Marquette
}
74 d88c6a9f Scott Ullrich
75 6b07c15a Matthew Grooms
if ($_GET['act'] == "delpriv") {
76 fab7ff44 Bill Marquette
77 6b07c15a Matthew Grooms
	if (!$a_group[$_GET['id']]) {
78
		pfSenseHeader("system_groupmanager.php");
79
		exit;
80
	}
81 fab7ff44 Bill Marquette
82 6b07c15a Matthew Grooms
	$privdeleted = $priv_list[$a_group[$id]['priv'][$_GET['privid']]]['name'];
83
	unset($a_group[$id]['priv'][$_GET['privid']]);
84
85
	foreach ($a_group[$id]['member'] as $uid) {
86
		$user = getUserEntryByUID($uid);
87
		if ($user)
88 659fa7f2 Matthew Grooms
			local_user_set($user);
89 d88c6a9f Scott Ullrich
	}
90 6b07c15a Matthew Grooms
91
	write_config();
92
	$_GET['act'] = "edit";
93
	$savemsg = gettext("Privilege")." {$privdeleted} ".
94
				gettext("successfully deleted")."<br/>";
95
}
96 45ee90ed Matthew Grooms
97
if($_GET['act']=="edit"){
98
	if (isset($id) && $a_group[$id]) {
99
		$pconfig['name'] = $a_group[$id]['name'];
100 6b07c15a Matthew Grooms
		$pconfig['gid'] = $a_group[$id]['gid'];
101
		$pconfig['gtype'] = $a_group[$id]['scope'];
102 45ee90ed Matthew Grooms
		$pconfig['description'] = $a_group[$id]['description'];
103 6b07c15a Matthew Grooms
		$pconfig['members'] = $a_group[$id]['member'];
104
		$pconfig['priv'] = $a_group[$id]['priv'];
105 45ee90ed Matthew Grooms
	}
106
}
107 6b07c15a Matthew Grooms
108 fab7ff44 Bill Marquette
if ($_POST) {
109
110 d88c6a9f Scott Ullrich
	unset($input_errors);
111
	$pconfig = $_POST;
112
113
	/* input validation */
114
	$reqdfields = explode(" ", "groupname");
115 b4fd804b Carlos Eduardo Ramos
	$reqdfieldsn = array(gettext("Group Name"));
116 d88c6a9f Scott Ullrich
	
117
	do_input_validation($_POST, $reqdfields, $reqdfieldsn, &$input_errors);
118
	
119
	if (preg_match("/[^a-zA-Z0-9\.\-_ ]/", $_POST['groupname']))
120 bbf825ab Vinicius Coque
		$input_errors[] = gettext("The group name contains invalid characters.");
121 d88c6a9f Scott Ullrich
		
122
	if (!$input_errors && !(isset($id) && $a_group[$id])) {
123
		/* make sure there are no dupes */
124
		foreach ($a_group as $group) {
125
			if ($group['name'] == $_POST['groupname']) {
126 bbf825ab Vinicius Coque
				$input_errors[] = gettext("Another entry with the same group name already exists.");
127 d88c6a9f Scott Ullrich
				break;
128
			}
129
		}
130
	}
131
	
132
	if (!$input_errors) {
133 45ee90ed Matthew Grooms
		$group = array();
134 d88c6a9f Scott Ullrich
		if (isset($id) && $a_group[$id])
135
			$group = $a_group[$id];
136
		
137
		$group['name'] = $_POST['groupname'];
138
		$group['description'] = $_POST['description'];
139 45ee90ed Matthew Grooms
140 70d6b5c4 Ermal
		if (empty($_POST['members']))
141
			unset($group['member']);
142
		else if ($group['gid'] != 1998) // all group
143 6b07c15a Matthew Grooms
			$group['member'] = $_POST['members'];
144 45ee90ed Matthew Grooms
145 d88c6a9f Scott Ullrich
		if (isset($id) && $a_group[$id])
146
			$a_group[$id] = $group;
147 45ee90ed Matthew Grooms
		else {
148
			$group['gid'] = $config['system']['nextgid']++;
149 d88c6a9f Scott Ullrich
			$a_group[] = $group;
150 45ee90ed Matthew Grooms
		}
151
152 659fa7f2 Matthew Grooms
		local_group_set($group);
153 d88c6a9f Scott Ullrich
		write_config();
154
		
155
		header("Location: system_groupmanager.php");
156
		exit;
157
	}
158 fab7ff44 Bill Marquette
}
159
160
include("head.inc");
161
162
?>
163 45ee90ed Matthew Grooms
164
<body link="#000000" vlink="#000000" alink="#000000" onload="<?= $jsevents["body"]["onload"] ?>">
165 6b07c15a Matthew Grooms
<?php include("fbegin.inc"); ?>
166
<script language="JavaScript">
167
<!--
168
169
function setall_selected(id) {
170
	selbox = document.getElementById(id);
171
	count = selbox.options.length;
172
	for (index = 0; index<count; index++)
173
		selbox.options[index].selected = true;
174
}
175
176
function clear_selected(id) {
177
	selbox = document.getElementById(id);
178
	count = selbox.options.length;
179
	for (index = 0; index<count; index++)
180
		selbox.options[index].selected = false;
181
}
182
183
function remove_selected(id) {
184
	selbox = document.getElementById(id);
185
	index = selbox.options.length - 1;
186
	for (; index >= 0; index--)
187
		if (selbox.options[index].selected)
188
			selbox.remove(index);
189
}
190
191
function copy_selected(srcid, dstid) {
192
	src_selbox = document.getElementById(srcid);
193
	dst_selbox = document.getElementById(dstid);
194
	count = src_selbox.options.length;
195
	for (index = 0; index < count; index++) {
196
		if (src_selbox.options[index].selected) {
197
			option = document.createElement('option');
198
			option.text = src_selbox.options[index].text;
199
			option.value = src_selbox.options[index].value;
200
			dst_selbox.add(option, null);
201
		}
202
	}
203
}
204
205
function move_selected(srcid, dstid) {
206
	copy_selected(srcid, dstid);
207
	remove_selected(srcid);
208
}
209
210
function presubmit() {
211
	clear_selected('notmembers');
212
	setall_selected('members');
213
}
214
215
//-->
216
</script>
217 fab7ff44 Bill Marquette
<?php
218 45ee90ed Matthew Grooms
	if ($input_errors)
219
		print_input_errors($input_errors);
220
	if ($savemsg)
221
		print_info_box($savemsg);
222 fab7ff44 Bill Marquette
?>
223 45ee90ed Matthew Grooms
<table width="100%" border="0" cellpadding="0" cellspacing="0">
224
	<tr>
225 e30001cf Matthew Grooms
		<td>
226 45ee90ed Matthew Grooms
			<?php 
227
				$tab_array = array();
228
				$tab_array[] = array(gettext("Users"), false, "system_usermanager.php");
229 6b07c15a Matthew Grooms
				$tab_array[] = array(gettext("Groups"), true, "system_groupmanager.php");
230 45ee90ed Matthew Grooms
				$tab_array[] = array(gettext("Settings"), false, "system_usermanager_settings.php");
231 d799787e Matthew Grooms
				$tab_array[] = array(gettext("Servers"), false, "system_authservers.php");
232 45ee90ed Matthew Grooms
				display_top_tabs($tab_array);
233
			?>
234
		</td>
235
	</tr>    
236
	<tr>
237 e30001cf Matthew Grooms
		<td id="mainarea">
238
			<div class="tabcont">
239
240
				<?php if($_GET['act']=="new" || $_GET['act']=="edit"): ?>
241
242
				<form action="system_groupmanager.php" method="post" name="iform" id="iform" onsubmit="presubmit()">
243
					<table width="100%" border="0" cellpadding="6" cellspacing="0">
244
	                    <?php
245
	                        $ro = "";
246
	                        if ($pconfig['gtype'] == "system")
247
	                            $ro = "readonly = \"readonly\"";
248
	                    ?>
249
						<tr>
250
							<td width="22%" valign="top" class="vncell"><?=gettext("Defined by");?></td>
251
							<td width="78%" class="vtable">
252
								<strong><?=strtoupper($pconfig['gtype']);?></strong>
253
								<input name="gtype" type="hidden" value="<?=$pconfig['gtype']?>"/>
254
							</td>
255
						</tr>
256
						<tr> 
257 bbf825ab Vinicius Coque
							<td width="22%" valign="top" class="vncellreq"><?=gettext("Group name");?></td>
258 e30001cf Matthew Grooms
							<td width="78%" class="vtable"> 
259
								<input name="groupname" type="text" class="formfld group" id="groupname" size="20" value="<?=htmlspecialchars($pconfig['name']);?>" <?=$ro;?>> 
260
							</td>
261
						</tr>
262
						<tr> 
263 bbf825ab Vinicius Coque
							<td width="22%" valign="top" class="vncell"><?=gettext("Description");?></td>
264 e30001cf Matthew Grooms
							<td width="78%" class="vtable"> 
265
								<input name="description" type="text" class="formfld unknown" id="description" size="20" value="<?=htmlspecialchars($pconfig['description']);?>">
266
								<br>
267 bbf825ab Vinicius Coque
								<?=gettext("Group description, for your own information only");?>
268 e30001cf Matthew Grooms
							</td>
269
						</tr>
270
271
						<?php if ($pconfig['gid'] != 1998): // all users group ?>
272
273
						<tr>
274
							<td width="22%" valign="top" class="vncell"><?=gettext("Group Memberships");?></td>
275
							<td width="78%" class="vtable" align="center">
276
								<table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
277
									<tr>
278
										<td align="center" width="50%">
279 bbf825ab Vinicius Coque
											<strong><?=gettext("Not Members");?></strong><br/>
280 e30001cf Matthew Grooms
											<br/>
281
												<select size="10" style="width: 75%" name="notmembers[]" class="formselect" id="notmembers" onChange="clear_selected('members')" multiple>
282
												<?php
283
													foreach ($config['system']['user'] as $user):
284
														if (in_array($user['uid'],$pconfig['members']))
285
															continue;
286
												?>
287
												<option value="<?=$user['uid'];?>" <?=$selected;?>>
288
													<?=htmlspecialchars($user['name']);?>
289
												</option>
290
												<?php endforeach; ?>
291
											</select>
292
											<br/>
293
										</td>
294
										<td>
295
											<br/>
296
											<a href="javascript:move_selected('notmembers','members')">
297 bbf825ab Vinicius Coque
												<img src="/themes/<?= $g['theme'];?>/images/icons/icon_right.gif" title="<?=gettext("Add Members");?>" alt="<?=gettext("Add Members");?>" width="17" height="17" border="0" />
298 e30001cf Matthew Grooms
											</a>
299
											<br/><br/>
300
											<a href="javascript:move_selected('members','notmembers')">
301 bbf825ab Vinicius Coque
												<img src="/themes/<?= $g['theme'];?>/images/icons/icon_left.gif" title="<?=gettext("Remove Members");?>" alt="<?=gettext("Remove Members");?>" width="17" height="17" border="0" />
302 e30001cf Matthew Grooms
											</a>
303
										</td>
304
										<td align="center" width="50%">
305 bbf825ab Vinicius Coque
											<strong><?=gettext("Members");?></strong><br/>
306 e30001cf Matthew Grooms
											<br/>
307
											<select size="10" style="width: 75%" name="members[]" class="formselect" id="members" onChange="clear_selected('notmembers')" multiple>
308
												<?php
309
													foreach ($config['system']['user'] as $user):
310
														if (!in_array($user['uid'],$pconfig['members']))
311
															continue;
312
												?>
313
												<option value="<?=$user['uid'];?>">
314
													<?=htmlspecialchars($user['name']);?>
315
												</option>
316
												<?php endforeach; ?>
317
											</select>
318
											<br/>
319
										</td>
320
									</tr>
321
								</table>
322
								<?=gettext("Hold down CTRL (pc)/COMMAND (mac) key to select multiple items");?>
323
							</td>
324
						</tr>
325 45ee90ed Matthew Grooms
326 e30001cf Matthew Grooms
						<?php endif; ?>
327 4d86a13d Scott Ullrich
						<?php if($_GET['act'] != "new"): ?>
328
						
329 e30001cf Matthew Grooms
						<tr>
330
							<td width="22%" valign="top" class="vncell"><?=gettext("Assigned Privileges");?></td>
331
							<td width="78%" class="vtable">
332
								<table class="tabcont" width="100%" border="0" cellpadding="0" cellspacing="0">
333
									<tr>
334
										<td width="40%" class="listhdrr"><?=gettext("Name");?></td>
335
										<td width="60%" class="listhdrr"><?=gettext("Description");?></td>
336
										<td class="list"></td>
337
									</tr>
338
									<?php
339
										if(is_array($pconfig['priv'])):
340
											$i = 0;
341
											foreach ($pconfig['priv'] as $priv):
342
									?>
343
									<tr>
344
										<td class="listr">
345
											<?=htmlspecialchars($priv_list[$priv]['name']);?>
346
										</td>
347
										<td class="listbg">
348 33300c73 Scott Ullrich
											<?=htmlspecialchars($priv_list[$priv]['descr']);?>
349 e30001cf Matthew Grooms
										</td>
350
										<td valign="middle" nowrap class="list">
351
											<a href="system_groupmanager.php?act=delpriv&id=<?=$id?>&privid=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this privilege?");?>')">
352
												<img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0" alt="" />
353
											</a>
354
										</td>
355
									</tr>
356
									<?php
357
											$i++;
358
	                      					endforeach;
359
										endif;
360
									?>
361
									<tr>
362
										<td class="list" colspan="2"></td>
363
										<td class="list">
364
											<a href="system_groupmanager_addprivs.php?groupid=<?=$id?>">
365
												<img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0" alt="" />
366
											</a>
367 4d86a13d Scott Ullrich
368 e30001cf Matthew Grooms
										</td>
369
									</tr>
370 4d86a13d Scott Ullrich
371 e30001cf Matthew Grooms
								</table>
372
							</td>
373
						</tr>
374 4d86a13d Scott Ullrich
						<?php endif; ?>
375 e30001cf Matthew Grooms
						<tr> 
376
							<td width="22%" valign="top">&nbsp;</td>
377
							<td width="78%"> 
378 6e707e77 Vinicius Coque
								<input name="save" type="submit" class="formbtn" value="<?=gettext("Save");?>"> 
379 e30001cf Matthew Grooms
								<?php if (isset($id) && $a_group[$id]): ?>
380
								<input name="id" type="hidden" value="<?=$id;?>">
381
								<input name="gid" type="hidden" value="<?=$pconfig['gid'];?>">
382
								<?php endif; ?>
383
							</td>
384
						</tr>
385
					</table>
386
				</form>
387
388
				<?php else: ?>
389
390
				<table width="100%" border="0" cellpadding="0" cellspacing="0">
391 6b07c15a Matthew Grooms
					<tr>
392 bbf825ab Vinicius Coque
						<td width="25%" class="listhdrr"><?=gettext("Group name");?></td>
393
						<td width="25%" class="listhdrr"><?=gettext("Description");?></td>
394
						<td width="30%" class="listhdrr"><?=gettext("Member Count");?></td>
395 e30001cf Matthew Grooms
						<td width="10%" class="list"></td>
396 45ee90ed Matthew Grooms
					</tr>
397 e30001cf Matthew Grooms
					<?php
398
						$i = 0;
399
						foreach($a_group as $group):
400
401
							if($group['scope'] == "system")
402
								$grpimg = "/themes/{$g['theme']}/images/icons/icon_system-group-grey.png";
403
							else
404
								$grpimg = "/themes/{$g['theme']}/images/icons/icon_system-group.png";
405
					?>
406 45ee90ed Matthew Grooms
					<tr>
407 e30001cf Matthew Grooms
						<td class="listlr">
408
							<table border="0" cellpadding="0" cellspacing="0">
409 6b07c15a Matthew Grooms
								<tr>
410 e30001cf Matthew Grooms
									<td align="left" valign="center">
411 bbf825ab Vinicius Coque
										<img src="<?=$grpimg;?>" alt="<?=gettext("User");?>" title="<?=gettext("User");?>" border="0" height="16" width="16" />
412 6b07c15a Matthew Grooms
									</td>
413
									</td>
414 e30001cf Matthew Grooms
									<td align="left" valign="middle">
415
										<?=htmlspecialchars($group['name']); ?>&nbsp;
416 6b07c15a Matthew Grooms
									</td>
417
								</tr>
418
							</table>
419 45ee90ed Matthew Grooms
						</td>
420 e30001cf Matthew Grooms
						<td class="listr">
421
							<?=htmlspecialchars($group['description']);?>&nbsp;
422
						</td>
423
						<td class="listbg">
424 33300c73 Scott Ullrich
							<?=count($group['member'])?>
425 e30001cf Matthew Grooms
						</td>
426
						<td valign="middle" nowrap class="list">
427
							<a href="system_groupmanager.php?act=edit&id=<?=$i;?>">
428 bbf825ab Vinicius Coque
								<img src="./themes/<?=$g['theme'];?>/images/icons/icon_e.gif" title="<?=gettext("edit group");?>" width="17" height="17" border="0">
429 e30001cf Matthew Grooms
							</a>
430
							&nbsp;
431
							<?php if($group['scope'] != "system"): ?>
432 b4fd804b Carlos Eduardo Ramos
							<a href="system_groupmanager.php?act=delgroup&id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this group?"); ?>')">
433
								<img src="/themes/<?=$g['theme'];?>/images/icons/icon_x.gif" title="<?=gettext("delete group"); ?>" width="17" height="17" border="0">
434 e30001cf Matthew Grooms
							</a>
435
							<?php endif; ?>
436 45ee90ed Matthew Grooms
						</td>
437
					</tr>
438 e30001cf Matthew Grooms
					<?php
439
						$i++;
440
						endforeach;
441
					?>
442 45ee90ed Matthew Grooms
					<tr> 
443 e30001cf Matthew Grooms
						<td class="list" colspan="3"></td>
444
						<td class="list">
445 bbf825ab Vinicius Coque
							<a href="system_groupmanager.php?act=new"><img src="./themes/<?=$g['theme'];?>/images/icons/icon_plus.gif" title="<?=gettext("add group");?>" width="17" height="17" border="0">
446 e30001cf Matthew Grooms
							</a>
447
						</td>
448
					</tr>
449
					<tr>
450
						<td colspan="3">
451
							<p>
452 2c955e0a Carlos Eduardo Ramos
								<?=gettext("Additional webConfigurator groups can be added here. 
453
								Group permissions can be assigned which are inherited by users who are members of the group.
454
								An icon that appears grey indicates that it is a system defined object.
455
								Some system object properties can be modified but they cannot be deleted.");?>
456 e30001cf Matthew Grooms
							</p>
457 45ee90ed Matthew Grooms
						</td>
458
					</tr>
459
				</table>
460
			
461 e30001cf Matthew Grooms
				<? endif; ?>
462
463
			</div>     
464 45ee90ed Matthew Grooms
		</td>
465
	</tr>
466
</table>
467
</body>
468 3e321df2 Ermal Luçi
<?php include("fend.inc"); ?>