7 changed files with 526 additions and 613 deletions
-
74lib/Group/backend.php
-
138lib/Group/database.php
-
118lib/User/backend.php
-
400lib/User/database.php
-
4lib/base.php
-
137lib/group.php
-
268lib/user.php
@ -0,0 +1,74 @@ |
|||
<?php |
|||
|
|||
/** |
|||
* ownCloud |
|||
* |
|||
* @author Frank Karlitschek |
|||
* @copyright 2010 Frank Karlitschek karlitschek@kde.org |
|||
* |
|||
* This library is free software; you can redistribute it and/or |
|||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
* License as published by the Free Software Foundation; either |
|||
* version 3 of the License, or any later version. |
|||
* |
|||
* This library is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public |
|||
* License along with this library. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
|
|||
|
|||
|
|||
/** |
|||
* Base class for user management |
|||
* |
|||
*/ |
|||
abstract class OC_GROUP_BACKEND { |
|||
/** |
|||
* Try to create a new group |
|||
* |
|||
* @param string $groupName The name of the group to create |
|||
*/ |
|||
abstract public static function createGroup($groupName); |
|||
|
|||
/** |
|||
* Check if a user belongs to a group |
|||
* |
|||
* @param string $username Name of the user to check |
|||
* @param string $groupName Name of the group |
|||
*/ |
|||
abstract public static function inGroup($username, $groupName); |
|||
|
|||
/** |
|||
* Add a user to a group |
|||
* |
|||
* @param string $username Name of the user to add to group |
|||
* @param string $groupName Name of the group in which add the user |
|||
*/ |
|||
abstract public static function addToGroup($username, $groupName); |
|||
|
|||
/** |
|||
* Remove a user from a group |
|||
* |
|||
* @param string $username Name of the user to remove from group |
|||
* @param string $groupName Name of the group from which remove the user |
|||
*/ |
|||
abstract public static function removeFromGroup($username,$groupName); |
|||
|
|||
/** |
|||
* Get all groups the user belongs to |
|||
* |
|||
* @param string $username Name of the user |
|||
*/ |
|||
abstract public static function getUserGroups($username); |
|||
|
|||
/** |
|||
* get a list of all groups |
|||
* |
|||
*/ |
|||
abstract public static function getGroups(); |
|||
} |
|||
@ -0,0 +1,138 @@ |
|||
<?php |
|||
|
|||
/** |
|||
* ownCloud |
|||
* |
|||
* @author Frank Karlitschek |
|||
* @copyright 2010 Frank Karlitschek karlitschek@kde.org |
|||
* |
|||
* This library is free software; you can redistribute it and/or |
|||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
* License as published by the Free Software Foundation; either |
|||
* version 3 of the License, or any later version. |
|||
* |
|||
* This library is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public |
|||
* License along with this library. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
/* |
|||
* |
|||
* The following SQL statement is just a help for developers and will not be |
|||
* executed! |
|||
* |
|||
* CREATE TABLE `groups` ( |
|||
* `gid` varchar(64) COLLATE utf8_unicode_ci NOT NULL, |
|||
* PRIMARY KEY (`gid`) |
|||
* ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; |
|||
* |
|||
* CREATE TABLE `group_user` ( |
|||
* `gid` varchar(64) COLLATE utf8_unicode_ci NOT NULL, |
|||
* `uid` varchar(64) COLLATE utf8_unicode_ci NOT NULL |
|||
* ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; |
|||
* |
|||
*/ |
|||
|
|||
oc_require_once( 'Group/backend.php' ); |
|||
|
|||
/** |
|||
* Class for group management in a SQL Database (e.g. MySQL, SQLite) |
|||
* |
|||
*/ |
|||
class OC_GROUP_DATABASE extends OC_GROUP_BACKEND { |
|||
static private $userGroupCache=array(); |
|||
|
|||
/** |
|||
* Try to create a new group |
|||
* |
|||
* @param string $groupName The name of the group to create |
|||
*/ |
|||
public static function createGroup( $gid ){ |
|||
$query = OC_DB::prepare( "SELECT * FROM `*PREFIX*groups` WHERE `gid` = ?" ); |
|||
$result = $query->execute( $gid ); |
|||
|
|||
if( $result->numRows() > 0 ){ |
|||
return false; |
|||
} |
|||
else{ |
|||
$query = OC_DB::prepare( "INSERT INTO `*PREFIX*groups` ( `gid` ) VALUES( ? )" ); |
|||
$result = $query->prepare( $gid ); |
|||
|
|||
return $result ? true : false; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Check if a user belongs to a group |
|||
* |
|||
* @param string $username Name of the user to check |
|||
* @param string $groupName Name of the group |
|||
*/ |
|||
public static function inGroup($username,$groupName) { |
|||
$query = OC_DB::prepare( "SELECT * FROM `*PREFIX*group_user` WHERE `gid` = ? AND `uid` = ?" ); |
|||
$result = $query->execute( $groupName, $username ); |
|||
|
|||
return $result->numRows() > 0 ? true : false; |
|||
} |
|||
|
|||
/** |
|||
* Add a user to a group |
|||
* |
|||
* @param string $username Name of the user to add to group |
|||
* @param string $groupName Name of the group in which add the user |
|||
*/ |
|||
public static function addToGroup($username, $groupName) { |
|||
if( !OC_USER::inGroup( $username, $groupName )){ |
|||
$query = OC_DB::prepare( "INSERT INTO `*PREFIX*group_user` ( `uid`, `gid` ) VALUES( ?, ? )" ); |
|||
$result = $query->execute( $username, $groupName ); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Remove a user from a group |
|||
* |
|||
* @param string $username Name of the user to remove from group |
|||
* @param string $groupName Name of the group from which remove the user |
|||
*/ |
|||
public static function removeFromGroup($username,$groupName){ |
|||
$query = OC_DB::prepare( "DELETE FROM `*PREFIX*group_user` WHERE `uid` = ? AND `gid` = ?" ); |
|||
$result = $query->execute( $username, $groupName ); |
|||
} |
|||
|
|||
/** |
|||
* Get all groups the user belongs to |
|||
* |
|||
* @param string $username Name of the user |
|||
*/ |
|||
public static function getUserGroups($username) { |
|||
$query = OC_DB::prepare( "SELECT * FROM `*PREFIX*group_user` WHERE `uid` = ?" ); |
|||
$result = $query->execute( $username ); |
|||
|
|||
$groups = array(); |
|||
while( $row = $result->fetchRow()){ |
|||
$groups[] = $row; |
|||
} |
|||
|
|||
return $groups; |
|||
} |
|||
|
|||
/** |
|||
* get a list of all groups |
|||
* |
|||
*/ |
|||
public static function getGroups() { |
|||
$query = OC_DB::prepare( "SELECT * FROM `*PREFIX*groups`" ); |
|||
$result = $query->execute(); |
|||
|
|||
$groups = array(); |
|||
while( $row = $result->fetchRow()){ |
|||
$groups[] = $row; |
|||
} |
|||
|
|||
return $groups; |
|||
} |
|||
} |
|||
@ -0,0 +1,137 @@ |
|||
<?php |
|||
/** |
|||
* ownCloud |
|||
* |
|||
* @author Frank Karlitschek |
|||
* @copyright 2010 Frank Karlitschek karlitschek@kde.org |
|||
* |
|||
* This library is free software; you can redistribute it and/or |
|||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
* License as published by the Free Software Foundation; either |
|||
* version 3 of the License, or any later version. |
|||
* |
|||
* This library is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public |
|||
* License along with this library. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
|
|||
/** |
|||
* This class provides all methods needed for managing groups. |
|||
*/ |
|||
class OC_GROUP { |
|||
// The backend used for user management
|
|||
private static $_backend; |
|||
|
|||
// Backends available (except database)
|
|||
private static $_backends = array(); |
|||
|
|||
/** |
|||
* @brief registers backend |
|||
* @param $name name of the backend |
|||
* @returns true/false |
|||
* |
|||
* Makes a list of backends that can be used by other modules |
|||
*/ |
|||
public static function registerBackend( $name ){ |
|||
self::$_backends[] = $name; |
|||
return true; |
|||
} |
|||
|
|||
/** |
|||
* @brief gets available backends |
|||
* @returns array of backends |
|||
* |
|||
* Returns the names of all backends. |
|||
*/ |
|||
public static function getBackends(){ |
|||
return self::$_backends; |
|||
} |
|||
|
|||
/** |
|||
* @brief set the group backend |
|||
* @param string $backend The backend to use for user managment |
|||
* @returns true/false |
|||
*/ |
|||
public static function setBackend( $backend = 'database' ){ |
|||
// You'll never know what happens
|
|||
if( null === $backend OR !is_string( $backend )){ |
|||
$backend = 'database'; |
|||
} |
|||
|
|||
// Load backend
|
|||
switch( $backend ){ |
|||
case 'database': |
|||
case 'mysql': |
|||
case 'sqlite': |
|||
oc_require_once('User/database.php'); |
|||
self::$_backend = new OC_USER_DATABASE(); |
|||
break; |
|||
default: |
|||
$className = 'OC_USER_' . strToUpper($backend); |
|||
self::$_backend = new $className(); |
|||
break; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* Get the name of a group |
|||
* |
|||
* @param string $groupId ID of the group |
|||
* @param boolean $noCache If false the cache is used to find the name of the group |
|||
*/ |
|||
public static function getGroupName($groupId, $noCache=false) { |
|||
return self::$_backend->getGroupName($groupId, $noCache); |
|||
} |
|||
|
|||
/** |
|||
* Check if a user belongs to a group |
|||
* |
|||
* @param string $username Name of the user to check |
|||
* @param string $groupName Name of the group |
|||
*/ |
|||
public static function inGroup($username, $groupName) { |
|||
return self::$_backend->inGroup($username, $groupName); |
|||
} |
|||
|
|||
/** |
|||
* Add a user to a group |
|||
* |
|||
* @param string $username Name of the user to add to group |
|||
* @param string $groupName Name of the group in which add the user |
|||
*/ |
|||
public static function addToGroup($username, $groupName) { |
|||
return self::$_backend->addToGroup($username, $groupName); |
|||
} |
|||
|
|||
/** |
|||
* Remove a user from a group |
|||
* |
|||
* @param string $username Name of the user to remove from group |
|||
* @param string $groupName Name of the group from which remove the user |
|||
*/ |
|||
public static function removeFromGroup($username,$groupName){ |
|||
return self::$_backend->removeFromGroup($username, $groupName); |
|||
} |
|||
|
|||
/** |
|||
* Get all groups the user belongs to |
|||
* |
|||
* @param string $username Name of the user |
|||
*/ |
|||
public static function getUserGroups($username) { |
|||
return self::$_backend->getUserGroups($username); |
|||
} |
|||
|
|||
/** |
|||
* get a list of all groups |
|||
* |
|||
*/ |
|||
public static function getGroups() { |
|||
return self::$_backend->getGroups(); |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue