Skip to content

Commit

Permalink
Merge pull request #52 from oat-sa/release-2.1.0
Browse files Browse the repository at this point in the history
Release 2.1.0
  • Loading branch information
boajer authored Oct 13, 2017
2 parents b7704d1 + 24100ca commit 5689118
Show file tree
Hide file tree
Showing 14 changed files with 153 additions and 101 deletions.
4 changes: 4 additions & 0 deletions config/default/DataBaseAccess.conf.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?php
return new \oat\taoDacSimple\model\DataBaseAccess([
\oat\taoDacSimple\model\DataBaseAccess::OPTION_PERSISTENCE => 'default',
]);
8 changes: 4 additions & 4 deletions controller/AdminAccessController.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Copyright (c) 2014 (original work) Open Assessment Technologies SA;
* Copyright (c) 2014-2017 (original work) Open Assessment Technologies SA;
*
*
*/
Expand All @@ -36,16 +36,16 @@
*/
class AdminAccessController extends \tao_actions_CommonModule
{

private $dataAccess = null;
/** @var DataBaseAccess */
private $dataAccess;

/**
* initialize the services
*/
public function __construct()
{
parent::__construct();
$this->dataAccess = new DataBaseAccess();
$this->dataAccess = $this->getServiceManager()->get(DataBaseAccess::SERVICE_ID);
}

/**
Expand Down
2 changes: 1 addition & 1 deletion manifest.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
'label' => 'extension-tao-dac-simple',
'description' => 'extension that allows admin to give access to some resources to other people',
'license' => 'GPL-2.0',
'version' => '2.0.3',
'version' => '2.1.0',
'author' => 'Open Assessment Technologies SA',
'requires' => array(
'taoBackOffice' => '>=1.1.0'
Expand Down
35 changes: 22 additions & 13 deletions model/AdminService.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@

namespace oat\taoDacSimple\model;

use oat\taoDacSimple\model\DataBaseAccess;
use oat\tao\model\menu\Action;
use oat\oatbox\service\ServiceManager;

/**
* Service to administer the privileges
Expand All @@ -36,12 +35,11 @@ class AdminService
*
* @param string $resourceUri
* @param string $userUri
* @param string $userType
* @return boolean
*/
public static function setOwner($resourceUri, $userUri) {

$db = new DataBaseAccess();
/** @var DataBaseAccess $db */
$db = self::getServiceManager()->get(DataBaseAccess::SERVICE_ID);

// Needs better abstraction
$dbRow = $db->getUsersWithPermissions(array($resourceUri));
Expand All @@ -53,18 +51,19 @@ public static function setOwner($resourceUri, $userUri) {

return $db->addPermissions($userUri, $resourceUri, array('OWNER'));
}

/**
* Get a list of users with permissions for a given resource
*
* Returns an associativ array with userid as key and an array of rights as value
*
* @param string $resourceIds
*
* Returns an associative array with userid as key and an array of rights as value
*
* @param $resourceUri
* @return array
*/
public static function getUsersPermissions($resourceUri)
{
$db = new DataBaseAccess();
/** @var DataBaseAccess $db */
$db = self::getServiceManager()->get(DataBaseAccess::SERVICE_ID);
$results = $db->getUsersWithPermissions(array($resourceUri));

$permissions = array();
Expand All @@ -79,12 +78,17 @@ public static function getUsersPermissions($resourceUri)

return $permissions;
}

/**
* recursivly add permissions to a class and all instances
* @param \core_kernel_classes_Class $class
* @param $userUri
* @param $rights
*/
public static function addPermissionToClass(\core_kernel_classes_Class $class, $userUri, $rights) {
$dbAccess = new DataBaseAccess();

/** @var DataBaseAccess $dbAccess */
$dbAccess = self::getServiceManager()->get(DataBaseAccess::SERVICE_ID);
$dbAccess->addPermissions($userUri, $class->getUri(), $rights);
foreach ($class->getInstances(false) as $instance) {
$dbAccess->addPermissions($userUri, $instance->getUri(), $rights);
Expand All @@ -93,4 +97,9 @@ public static function addPermissionToClass(\core_kernel_classes_Class $class, $
self::addPermissionToClass($subclass, $userUri, $rights);
}
}

public static function getServiceManager(){
return ServiceManager::getServiceManager();
}

}
84 changes: 54 additions & 30 deletions model/DataBaseAccess.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
namespace oat\taoDacSimple\model;

use oat\oatbox\event\EventManagerAwareTrait;
use oat\oatbox\service\ConfigurableService;
use oat\taoDacSimple\model\event\DacAddedEvent;
use oat\taoDacSimple\model\event\DacRemovedEvent;

Expand All @@ -31,39 +32,19 @@
* @author Antoine Robin <[email protected]>
* @author Joel Bout <[email protected]>
*/
class DataBaseAccess
class DataBaseAccess extends ConfigurableService
{

use EventManagerAwareTrait;
// --- ASSOCIATIONS ---

const SERVICE_ID = 'taoDacSimple/DataBaseAccess';

// --- ATTRIBUTES ---
const OPTION_PERSISTENCE = 'persistence';


private $persistence = null;
private $persistence;

const TABLE_PRIVILEGES_NAME = 'data_privileges';

// --- OPERATIONS ---


public function __construct()
{
$this->setPersistence(\common_persistence_Manager::getPersistence('default'));

}


/**
*
* @author Lionel Lecaque, [email protected]
* @param \common_persistence_Persistence $persistence
*/
public function setPersistence(\common_persistence_Persistence $persistence){
$this->persistence = $persistence;
}

/**
* We can know which users have a privilege on a resource
* @param array $resourceIds
Expand All @@ -76,7 +57,7 @@ public function getUsersWithPermissions($resourceIds)
$query = "SELECT resource_id, user_id, privilege FROM " . self::TABLE_PRIVILEGES_NAME . "
WHERE resource_id IN ($inQuery)";
/** @var \PDOStatement $statement */
$statement = $this->persistence->query($query, $resourceIds);
$statement = $this->getPersistence()->query($query, $resourceIds);
$results = $statement->fetchAll(\PDO::FETCH_ASSOC);

return $results;
Expand All @@ -103,7 +84,7 @@ public function getPermissions($userIds, array $resourceIds){
$params[] = $userId;
}
/** @var \PDOStatement $statement */
$statement = $this->persistence->query($query, $params);
$statement = $this->getPersistence()->query($query, $params);
$results = $statement->fetchAll(\PDO::FETCH_ASSOC);

foreach ($results as $result) {
Expand All @@ -127,7 +108,7 @@ public function addPermissions($user, $resourceId, $rights)

foreach ($rights as $privilege) {
// add a line with user URI, resource Id and privilege
$this->persistence->insert(
$this->getPersistence()->insert(
self::TABLE_PRIVILEGES_NAME,
array('user_id' => $user, 'resource_id' => $resourceId, 'privilege' => $privilege)
);
Expand All @@ -154,7 +135,7 @@ public function getResourcePermissions($resourceId)
$query = "SELECT user_id, privilege FROM " . self::TABLE_PRIVILEGES_NAME . " WHERE resource_id = ?";

/** @var \PDOStatement $statement */
$statement = $this->persistence->query($query, array($resourceId));
$statement = $this->getPersistence()->query($query, array($resourceId));
$results = $statement->fetchAll(\PDO::FETCH_ASSOC);

foreach ($results as $result) {
Expand Down Expand Up @@ -219,7 +200,7 @@ public function removePermissions($user, $resourceId, $rights)
}
$params[] = $user;

$this->persistence->exec($query, $params);
$this->getPersistence()->exec($query, $params);
$this->getEventManager()->trigger(new DacRemovedEvent($user, $resourceId, $rights));

return true;
Expand All @@ -237,11 +218,54 @@ public function removeAllPermissions($resourceIds)
//get all entries that match (resourceId) and remove them
$inQuery = implode(',', array_fill(0, count($resourceIds), '?'));
$query = "DELETE FROM " . self::TABLE_PRIVILEGES_NAME . " WHERE resource_id IN ($inQuery)";
$this->persistence->exec($query, $resourceIds);
$this->getPersistence()->exec($query, $resourceIds);

$this->getEventManager()->trigger(new DacRemovedEvent('-', $resourceIds, '-'));

return true;
}

/**
* @return \common_persistence_SqlPersistence
*/
private function getPersistence()
{
if (!$this->persistence){

$this->persistence = $this->getServiceManager()->get(\common_persistence_Manager::SERVICE_ID)->getPersistence($this->getOption(self::OPTION_PERSISTENCE));
}
return $this->persistence;
}


public function createTables(){

$schemaManager = $this->getPersistence()->getDriver()->getSchemaManager();
$schema = $schemaManager->createSchema();
$fromSchema = clone $schema;
$table = $schema->createtable(self::TABLE_PRIVILEGES_NAME);
$table->addColumn('user_id',"string", ["notnull" => null,"length" => 255]);
$table->addColumn('resource_id',"string", ["notnull" => null,"length" => 255]);
$table->addColumn('privilege',"string", ["notnull" => null,"length" => 255]);
$table->setPrimaryKey(["user_id","resource_id","privilege"]);

$queries = $this->getPersistence()->getPlatform()->getMigrateSchemaSql($fromSchema, $schema);
foreach ($queries as $query){
$this->getPersistence()->exec($query);
}
}


public function removeTables()
{
$persistence = $this->getPersistence();
$schema = $persistence->getDriver()->getSchemaManager()->createSchema();
$fromSchema = clone $schema;
$table = $schema->dropTable(self::TABLE_PRIVILEGES_NAME);
$queries = $persistence->getPlatform()->getMigrateSchemaSql($fromSchema, $schema);
foreach ($queries as $query) {
$persistence->exec($query);
}
}

}
8 changes: 3 additions & 5 deletions model/PermissionProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
namespace oat\taoDacSimple\model;

use oat\generis\model\data\permission\PermissionInterface;
use oat\taoDacSimple\model\DataBaseAccess;
use oat\oatbox\user\User;
use core_kernel_classes_Class;
use oat\oatbox\service\ConfigurableService;
Expand All @@ -35,8 +34,7 @@
* @access public
* @author Joel Bout, <[email protected]>
*/
class PermissionProvider extends ConfigurableService
implements PermissionInterface
class PermissionProvider extends ConfigurableService implements PermissionInterface
{

/**
Expand All @@ -53,7 +51,7 @@ public function getPermissions(User $user, array $resourceIds) {
return $permissions;
}

$dbAccess = new DataBaseAccess();
$dbAccess = $this->getServiceManager()->get(DataBaseAccess::SERVICE_ID);
$userIds = $user->getRoles();
$userIds[] = $user->getIdentifier();
return $dbAccess->getPermissions($userIds, $resourceIds);
Expand All @@ -65,7 +63,7 @@ public function getPermissions(User $user, array $resourceIds) {
*/
public function onResourceCreated(\core_kernel_classes_Resource $resource)
{
$dbAccess = new DataBaseAccess();
$dbAccess = $this->getServiceManager()->get(DataBaseAccess::SERVICE_ID);
// verify resource is created
$permissions = $dbAccess->getResourcePermissions($resource->getUri());
if (empty($permissions)) {
Expand Down
17 changes: 3 additions & 14 deletions scripts/install/SetupDataAccess.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,21 +32,10 @@ class SetupDataAccess extends InstallAction
{
public function __invoke($params)
{
$persistence = $this->getServiceLocator()->get(\common_persistence_Manager::SERVICE_ID)->getPersistenceById('default');
/** @var DataBaseAccess $databaseAccess */
$databaseAccess = $this->getServiceLocator()->get(DataBaseAccess::SERVICE_ID);

$schemaManager = $persistence->getDriver()->getSchemaManager();
$schema = $schemaManager->createSchema();
$fromSchema = clone $schema;
$table = $schema->createtable(DataBaseAccess::TABLE_PRIVILEGES_NAME);
$table->addColumn('user_id',"string",array("notnull" => null,"length" => 255));
$table->addColumn('resource_id',"string",array("notnull" => null,"length" => 255));
$table->addColumn('privilege',"string",array("notnull" => null,"length" => 255));
$table->setPrimaryKey(array("user_id","resource_id","privilege"));

$queries = $persistence->getPlatform()->getMigrateSchemaSql($fromSchema, $schema);
foreach ($queries as $query){
$persistence->exec($query);
}
$databaseAccess->createTables();

$impl = new PermissionProvider();
$this->registerService(PermissionInterface::SERVICE_ID, $impl);
Expand Down
12 changes: 3 additions & 9 deletions scripts/uninstall/RemoveDataAccess.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,9 @@ public function __invoke($params)
}

try {
$persistence = $this->getServiceLocator()->get(\common_persistence_Manager::SERVICE_ID)->getPersistenceById('default');

$schema = $persistence->getDriver()->getSchemaManager()->createSchema();
$fromSchema = clone $schema;
$table = $schema->dropTable(DataBaseAccess::TABLE_PRIVILEGES_NAME);
$queries = $persistence->getPlatform()->getMigrateSchemaSql($fromSchema, $schema);
foreach ($queries as $query) {
$persistence->exec($query);
}
/** @var DataBaseAccess $databaseAccess */
$databaseAccess = $this->getServiceManager()->get(DataBaseAccess::SERVICE_ID);
$databaseAccess->removeTables();

$this->getServiceManager()->register(PermissionInterface::SERVICE_ID, new FreeAccess());

Expand Down
13 changes: 13 additions & 0 deletions scripts/update/Updater.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

namespace oat\taoDacSimple\scripts\update;

use oat\taoDacSimple\model\DataBaseAccess;
use oat\taoDacSimple\model\PermissionProvider;
use oat\taoDacSimple\model\AdminService;
use oat\taoBackOffice\model\menuStructure\ClassActionRegistry;
Expand Down Expand Up @@ -95,5 +96,17 @@ public function update($initialVersion) {
}

$this->skip('1.2.0', '2.0.3');


if ($this->isVersion( '2.0.3')) {

$dataAccess = new DataBaseAccess([
DataBaseAccess::OPTION_PERSISTENCE =>'default'
]);

$this->getServiceManager()->register(DataBaseAccess::SERVICE_ID, $dataAccess);

$this->setVersion('2.1.0');
}
}
}
Loading

0 comments on commit 5689118

Please sign in to comment.