Project

General

Profile

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