blob: b163cad8cfa120319ab17ff73e483683cc7c19db [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. The ASF licenses this file to You
* under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* 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. For additional information regarding
* copyright in this work, please see the NOTICE file in the top level
* directory of this distribution.
*/
package org.apache.roller.weblogger.business;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.roller.weblogger.WebloggerException;
import org.apache.roller.weblogger.pojos.RollerPermission;
import org.apache.roller.weblogger.pojos.User;
import org.apache.roller.weblogger.pojos.Weblog;
import org.apache.roller.weblogger.pojos.WeblogPermission;
/**
* Interface to user, role and permissions management.
*/
public interface UserManager {
//--------------------------------------------------------------- user CRUD
/**
* Add a new user.
*
* This method is used to provide supplemental data to new user accounts,
* such as adding the proper roles for the user. This method should see if
* the new user is the first user and give that user the admin role if so.
*
* @param newUser User object to be added.
* @throws WebloggerException If there is a problem.
*/
void addUser(User newUser) throws WebloggerException;
/**
* Save a user.
*
* @param user User to be saved.
* @throws WebloggerException If there is a problem.
*/
void saveUser(User user) throws WebloggerException;
/**
* Remove a user.
*
* @param user User to be removed.
* @throws WebloggerException If there is a problem.
*/
void removeUser(User user) throws WebloggerException;
/**
* Get count of enabled users
*/
long getUserCount() throws WebloggerException;
/**
* get a user by activation code
* @param activationCode
* @return
* @throws WebloggerException
*/
User getUserByActivationCode(String activationCode)
throws WebloggerException;
//------------------------------------------------------------ user queries
/**
* Retrieve a user by its internal identifier id.
*
* @param id the id of the user to retrieve.
* @return the user object with specified id or null if not found
* @throws WebloggerException
*/
User getUser(String id) throws WebloggerException;
/**
* Lookup a user by UserName.
*
* This lookup is restricted to 'enabled' users by default. So this method
* will return null if the user is found but is not enabled.
*
* @param userName User Name of user to lookup.
* @return The user, or null if not found or not enabled.
* @throws WebloggerException If there is a problem.
*/
User getUserByUserName(String userName) throws WebloggerException;
/**
* Lookup a user by UserName with the given enabled status.
*
* @param userName User Name of user to lookup.
* @param enabled True if user is enabled, false otherwise.
* @return The user, or null if not found or of the proper enabled status.
* @throws WebloggerException If there is a problem.
*/
User getUserByUserName(String userName, Boolean enabled)
throws WebloggerException;
/**
* Lookup a user by Open ID URL.
*
* This lookup is restricted to 'enabled' users by default. So this method
* will return null if the user is found but is not enabled.
*
* @param openIdUrl OpenIdUrl of user to lookup.
* @return The user, or null if not found or not enabled.
* @throws WebloggerException If there is a problem.
*/
User getUserByOpenIdUrl(String openIdUrl)
throws WebloggerException;
/**
* Lookup a group of users.
*
* The lookup may be constrained to users with a certain enabled status,
* to users created within a certain date range, and the results can be
* confined to a certain offset & length for paging abilities.
*
* @param enabled True for enabled only, False for disabled only (or null for all)
* @param startDate Restrict to those created after startDate (or null for all)
* @param endDate Restrict to those created before startDate (or null for all)
* @param offset The index of the first result to return.
* @param length The number of results to return.
* @return List A list of UserDatUsers which match the criteria.
* @throws WebloggerException If there is a problem.
*/
List<User> getUsers(
Boolean enabled,
Date startDate,
Date endDate,
int offset,
int length) throws WebloggerException;
/**
* Lookup users whose usernames or email addresses start with a string.
*
* @param startsWith String to match userNames and emailAddresses against
* @param offset Offset into results (for paging)
* @param length Max to return (for paging)
* @param enabled True for only enalbed, false for disabled, null for all
* @return List of (up to length) users that match startsWith string
*/
List<User> getUsersStartingWith(String startsWith,
Boolean enabled, int offset, int length) throws WebloggerException;
/**
* Get map with 26 entries, one for each letter A-Z and
* containing Longs reflecting the number of users whose
* names start with each letter.
*/
Map<String, Long> getUserNameLetterMap() throws WebloggerException;
/**
* Get collection of users whose names begin with specified letter
*/
List<User> getUsersByLetter(char letter, int offset, int length)
throws WebloggerException;
//-------------------------------------------------------- permissions CRUD
/**
* Return true if user has permission specified.
*/
boolean checkPermission(RollerPermission perm, User user)
throws WebloggerException;
/**
* Grant to user specific actions in a weblog.
* (will create new permission record if none already exists)
* @param weblog Weblog to grant permissions in
* @param user User to grant permissions to
* @param actions Actions to be granted
*/
void grantWeblogPermission(Weblog weblog, User user, List<String> actions)
throws WebloggerException;
/**
* Grant to user specific actions in a weblog, but pending confirmation.
* (will create new permission record if none already exists)
* @param weblog Weblog to grant permissions in
* @param user User to grant permissions to
* @param actions Actions to be granted
*/
void grantWeblogPermissionPending(Weblog weblog, User user, List<String> actions)
throws WebloggerException;
/**
* Confirm user's permission within specified weblog or throw exception if no pending permission exists.
* (changes state of permission record to pending = true)
* @param weblog Weblog to grant permissions in
* @param user User to grant permissions to
*/
void confirmWeblogPermission(Weblog weblog, User user)
throws WebloggerException;
/**
* Decline permissions within specified weblog or throw exception if no pending permission exists.
* (removes permission record)
* @param weblog Weblog to grant permissions in
* @param user User to grant permissions to
*/
void declineWeblogPermission(Weblog weblog, User user)
throws WebloggerException;
/**
* Revoke from user specific actions in a weblog.
* (if resulting permission has empty removes permission record)
* @param weblog Weblog to grant permissions in
* @param user User to grant permissions to
* @param actions Actions to be granted
*/
void revokeWeblogPermission(Weblog weblog, User user, List<String> actions)
throws WebloggerException;
/**
* Get all of user's weblog permissions.
*/
List<WeblogPermission> getWeblogPermissions(User user)
throws WebloggerException;
/**
* Get all of user's pending weblog permissions.
*/
List<WeblogPermission> getPendingWeblogPermissions(User user)
throws WebloggerException;
/**
* Get all active permissions associated with a weblog.
*/
List<WeblogPermission> getWeblogPermissions(Weblog weblog)
throws WebloggerException;
/**
* Get all pending permissions associated with a weblog.
*/
List<WeblogPermission> getPendingWeblogPermissions(Weblog weblog)
throws WebloggerException;
/**
* Get all permissions (pending or actual) for a weblog.
*/
List<WeblogPermission> getWeblogPermissionsIncludingPending(Weblog weblog)
throws WebloggerException;
/**
* Get user's permission within a weblog or null if none.
*/
WeblogPermission getWeblogPermission(Weblog weblog, User user)
throws WebloggerException;
/**
* Get user's permission (pending or actual) for a weblog
*/
WeblogPermission getWeblogPermissionIncludingPending(Weblog weblog, User user)
throws WebloggerException;
//--------------------------------------------------------------- role CRUD
/**
* Grant role to user.
*/
void grantRole(String roleName, User user) throws WebloggerException;
/**
* Revoke role from user.
*/
void revokeRole(String roleName, User user) throws WebloggerException;
/**
* Returns true if user has role specified, should be used only for testing.
* @deprecated Use checkPermission() instead.
*/
boolean hasRole(String roleName, User user) throws WebloggerException;
/**
* Get roles associated with user, should be used only for testing.
* Get all roles associated with user.
* @deprecated Use checkPermission() instead.
*/
List<String> getRoles(User user) throws WebloggerException;
/**
* Release any resources held by manager.
*/
void release();
}