* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- */
+ */
package org.wamblee.security.authorization;
-import org.wamblee.persistence.AbstractPersistent;
-
-import org.wamblee.usermgt.User;
-import org.wamblee.usermgt.UserAccessor;
-
import java.util.ArrayList;
import java.util.List;
+import javax.persistence.CascadeType;
+import javax.persistence.DiscriminatorValue;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderColumn;
+import javax.persistence.Transient;
+
+import org.wamblee.security.authentication.UserAccessor;
+import org.wamblee.security.authentication.UserAdministration;
+
/**
* Default implementation of an authorization service. To determine whether
* access to a resource is allowed, the service consults a number of
*
* @author Erik Brakkee
*/
-public class DefaultAuthorizationService extends AbstractPersistent implements
- AuthorizationService {
+@Entity
+@DiscriminatorValue("DEFAULT")
+public class DefaultAuthorizationService extends AbstractAuthorizationService {
+
/**
* List of ordered authorization rules.
*/
+ @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, targetEntity = AbstractAuthorizationRule.class)
+ @JoinTable(name = "SEC_AUTH_SVC_RULE", joinColumns = { @JoinColumn(name = "SVC_ID") }, inverseJoinColumns = { @JoinColumn(name = "RULE_ID") })
+ @OrderColumn(name = "RULE_INDEX")
private List<AuthorizationRule> rules;
/**
* User accessor used to obtain the current user.
*/
+ @Transient
private UserAccessor userAccessor;
- /**
- * Name for this instance of the authorization service.
- */
- private String name;
+ @Transient
+ private UserAdministration userAdmin;
/**
* Constructs the service.
*
* @param aAccessor
* User accessor.
+ * @param aUserAdmin
+ * User administration.
* @param aName
* Name of this instance of the service.
*/
- public DefaultAuthorizationService(UserAccessor aAccessor, String aName) {
+ public DefaultAuthorizationService(UserAccessor aAccessor,
+ UserAdministration aUserAdmin, String aName) {
+ super(aName);
rules = new ArrayList<AuthorizationRule>();
userAccessor = aAccessor;
- name = aName;
+ userAdmin = aUserAdmin;
}
/**
public DefaultAuthorizationService() {
rules = new ArrayList<AuthorizationRule>();
userAccessor = null;
- name = null;
+ userAdmin = null;
}
- /**
- * Sets the user accessor.
- *
- * @param aUserAccessor
- * User accessor.
- */
+ @Override
public void setUserAccessor(UserAccessor aUserAccessor) {
userAccessor = aUserAccessor;
}
+ @Override
+ public void setUserAdministration(UserAdministration aUserAdmin) {
+ userAdmin = aUserAdmin;
+ for (AuthorizationRule rule : rules) {
+ rule.setUserAdministration(userAdmin);
+ }
+ }
+
/*
* (non-Javadoc)
*
* .lang.Object, org.wamblee.security.authorization.Operation)
*/
public boolean isAllowed(Object aResource, Operation aOperation) {
- User user = userAccessor.getCurrentUser();
+ String user = userAccessor.getCurrentUser();
for (AuthorizationRule rule : rules) {
switch (rule.isAllowed(aResource, aOperation, user)) {
return aResource;
}
- protected String getName() {
- return name;
- }
-
- public void setName(String aName) {
- name = aName;
- }
-
/*
* (non-Javadoc)
*
* @see org.wamblee.security.authorization.AuthorizationService#getRules()
*/
public AuthorizationRule[] getRules() {
- return rules.toArray(new AuthorizationRule[0]);
+ return rules.toArray(new AbstractAuthorizationRule[0]);
}
/*
* .wamblee.security.authorization.AuthorizationRule)
*/
public void appendRule(AuthorizationRule aRule) {
+ aRule.setUserAdministration(userAdmin);
rules.add(aRule);
}
* (int, org.wamblee.security.authorization.AuthorizationRule)
*/
public void insertRuleAfter(int aIndex, AuthorizationRule aRule) {
+ aRule.setUserAdministration(userAdmin);
rules.add(aIndex, aRule);
}
*/
protected void setMappedRules(List<AuthorizationRule> aRules) {
rules = aRules;
+ for (AuthorizationRule rule : rules) {
+ rule.setUserAdministration(userAdmin);
+ }
}
}