[Cartoweb-users] 3d party authentication

Oliver Christen oliver.christen at camptocamp.com
Wed Sep 27 08:38:37 EDT 2006


the "usual" way to do this is to create a plugin to extend the 
SecurityContainer class and access in session the username of the current 
user.
redefine the checkUser and getRoles functions (defined in 
SecurityManager.php).  The external application need to set that username in 
session before.

class exempleSecurityContainer extends SecurityContainer {

    /**
     * Database object
     * @var DB
     */
    protected $db;

    /**
     * @var ClientPluginConfig
     */
    protected $config;

    /**
     * Constructor
     */
    public function __construct(ClientPluginConfig $config) {
        require_once('DB.php');
        $this->config = $config;
    }

     /**
     * @see SecurityContainer::checkUser()
     */
     public function checkUser($username, $password) {

        $db = $this->getDb();
        $pass = $db->getOne(sprintf("SELECT password FROM user WHERE 
username='%s'",
                           addslashes($username)));
        Utils::checkDbError($pass);

        return $pass;
     }

     /**
     * @see SecurityContainer::getRoles()
     */
     public function getRoles($username) {

      if (empty($username)) {
       // Take the username from the extenal application.
       // This appends at the first cartoweb login when the auth
       // plugin has no info about the username.
            $username = $_SESSION["USER"];
      }

        $db = $this->getDb();
        $roles = $db->query(
            "SELECT roles FROM roles_table WHERE username = '{$username}'"
                            );

        Utils::checkDbError($roles);

        $result = array();
        while ($role = $roles->fetchRow(DB_FETCHMODE_ASSOC)) {
            // some treatment if needed before returning the role 
corresponding to the username
        }
        return $result;

     }

    /**
     * Returns the Pear::DB database connection.
     * @return DB
     */
    protected function getDb() {
        if ($this->db)
            return $this->db;

        if (!$this->config->databaseDsn)
            throw new CartoclientException('Missing databaseDsn parameter');
        $dsn = $this->config->databaseDsn;

        $this->db = DB::connect($dsn);
        Utils::checkDbError($this->db);
        return $this->db;
    }

}



> Hi,
>
> Need your help.
>
> I want to use one login page for all my project. So user logs in CMS and 
> get access to all application including CartoWeb.
> How can I integrate this feature to my CMS (of course for CartWeb only)?
> Thanks for the answers
>
> Bye
> _______________________________________________
> Cartoweb-users mailing list
> Cartoweb-users at lists.maptools.org
> http://lists.maptools.org/mailman/listinfo/cartoweb-users
> 



More information about the Cartoweb-users mailing list