2 * Copyright (C) 2001, 2002 The Mir-coders group
4 * This file is part of Mir.
6 * Mir is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * Mir is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with Mir; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 * In addition, as a special exception, The Mir-coders gives permission to link
21 * the code of this program with any library licensed under the Apache Software License,
22 * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
23 * (or with modified versions of the above that use the same license as the above),
24 * and distribute linked combinations including the two. You must obey the
25 * GNU General Public License in all respects for all of the code used other than
26 * the above mentioned libraries. If you modify this file, you may extend this
27 * exception to your version of the file, but you are not obligated to do so.
28 * If you do not wish to do so, delete this exception statement from your version.
31 package mircoders.accesscontrol;
33 import java.util.List;
34 import java.util.Vector;
36 import mir.config.MirPropertiesConfiguration;
37 import mir.log.LoggerWrapper;
38 import mircoders.entity.EntityUsers;
40 public class AccessControl {
41 private UserAccessControl user;
42 private GeneralAccessControl general;
43 protected LoggerWrapper logger = new LoggerWrapper("Global.AccessControl");
44 protected MirPropertiesConfiguration configuration;
46 public AccessControl() {
48 configuration = MirPropertiesConfiguration.instance();
50 user = new UserAccessControl(configuration.getVector("AccessControl.SuperUsers"));
51 general = new GeneralAccessControl();
54 throw new RuntimeException(t.toString());
58 public UserAccessControl user() {
62 public GeneralAccessControl general() {
66 public class GeneralAccessControl {
67 public boolean mayDeleteArticles(EntityUsers aSubject) {
68 return configuration.getString("Mir.Localizer.Admin.AllowDeleteArticle", "0").equals("1");
71 public void assertMayDeleteArticles(EntityUsers aSubject) throws AuthorizationExc, AuthorizationFailure {
73 if (!mayDeleteArticles(aSubject))
74 throw new AuthorizationExc("not allowed to delete articles");
77 throw new AuthorizationFailure(t);
81 public boolean mayDeleteComments(EntityUsers aSubject) {
82 return configuration.getString("Mir.Localizer.Admin.AllowDeleteComment", "0").equals("1");
85 public void assertMayDeleteComments(EntityUsers aSubject) throws AuthorizationExc, AuthorizationFailure {
87 if (!mayDeleteArticles(aSubject))
88 throw new AuthorizationExc("not allowed to delete comments");
91 throw new AuthorizationFailure(t);
96 public class UserAccessControl {
97 private List superusers;
99 public UserAccessControl(List aSuperUsers) {
100 superusers = new Vector(aSuperUsers);
103 public void assertMayAddUsers(EntityUsers aSubject) throws AuthorizationExc, AuthorizationFailure {
105 if (!mayAddUsers(aSubject))
106 throw new AuthorizationExc("not allowed to add users");
108 catch (Throwable t) {
109 throw new AuthorizationFailure(t);
114 public boolean mayAddUsers(EntityUsers aSubject) {
115 return superusers.contains(aSubject.getValue("login"));
118 public void assertMayEditUser(EntityUsers aSubject, EntityUsers anObject) throws AuthorizationExc, AuthorizationFailure {
120 if (!mayEditUser(aSubject, anObject))
121 throw new AuthorizationExc("not allowed to edit user " + anObject.getId());
123 catch (Throwable t) {
124 throw new AuthorizationFailure(t);
129 public boolean mayEditUser(EntityUsers aSubject, EntityUsers anObject) {
130 return superusers.contains(aSubject.getValue("login"));
133 public boolean mayEditUsers(EntityUsers aSubject) {
134 return superusers.contains(aSubject.getValue("login"));
137 public void assertMayDeleteUser(EntityUsers aSubject, EntityUsers anObject) throws AuthorizationExc, AuthorizationFailure {
139 if (!mayDeleteUser(aSubject, anObject))
140 throw new AuthorizationExc("not allowed to delete user " + anObject.getId());
142 catch (Throwable t) {
143 throw new AuthorizationFailure(t);
147 public boolean mayDeleteUser(EntityUsers aSubject, EntityUsers anObject) {
148 return superusers.contains(aSubject.getValue("login"));
151 public boolean mayDeleteUsers(EntityUsers aSubject) {
152 return superusers.contains(aSubject.getValue("login"));
155 public boolean mayChangeUserPassword(EntityUsers aSubject, EntityUsers anObject) {
156 return aSubject.getId().equals(anObject.getId()) || superusers.contains(aSubject.getValue("login"));
159 public void assertMayChangeUserPassword(EntityUsers aSubject, EntityUsers anObject) throws AuthorizationExc, AuthorizationFailure {
161 if (!mayChangeUserPassword(aSubject, anObject))
162 throw new AuthorizationExc("not allowed to change user " + anObject.getId()+"'s password");
164 catch (Throwable t) {
165 throw new AuthorizationFailure(t);