. * * @category Plugin * @package StatusNet * @author Craig Andrews * @copyright 2009 Free Software Foundation, Inc http://www.fsf.org * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } /** * Superclass for plugins that do authorization * * @category Plugin * @package StatusNet * @author Craig Andrews * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ abstract class AuthorizationPlugin extends Plugin { //is this plugin authoritative for authorization? public $authoritative = false; //------------Auth plugin should implement some (or all) of these methods------------\\ /** * Is a user allowed to log in? * @param user * @return boolean true if the user is allowed to login, false if explicitly not allowed to login, null if we don't explicitly allow or deny login */ function loginAllowed($user) { return null; } /** * Does a profile grant the user a named role? * @param profile * @return boolean true if the profile has the role, false if not */ function hasRole($profile, $name) { return false; } //------------Below are the methods that connect StatusNet to the implementing Auth plugin------------\\ function onStartSetUser($user) { $loginAllowed = $this->loginAllowed($user); if($loginAllowed === true){ return; }else if($loginAllowed === false){ $user = null; return false; }else{ if($this->authoritative) { $user = null; return false; }else{ return; } } } function onStartSetApiUser($user) { return $this->onStartSetUser($user); } function onStartHasRole($profile, $name, &$has_role) { if($this->hasRole($profile, $name)){ $has_role = true; return false; }else{ if($this->authoritative) { $has_role = false; return false; }else{ return; } } } }