You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PlexShare/fuel/packages/auth/migrations/005_auth_create_authdefault...

162 lines
5.9 KiB

7 years ago
<?php
namespace Fuel\Migrations;
include __DIR__."/../normalizedrivertypes.php";
class Auth_Create_Authdefaults
{
function up()
{
// get the drivers defined
$drivers = normalize_driver_types();
if (in_array('Ormauth', $drivers))
{
// get the tablename
\Config::load('ormauth', true);
$table = \Config::get('ormauth.table_name', 'users');
// make sure the correct connection is used
$connection = $this->dbconnection('ormauth');
/*
* create the default Groups and roles, to be compatible with standard Auth
*/
// create the 'Banned' group, 'banned' role
list($group_id, $rows_affected) = \DB::insert($table.'_groups')->set(array('name' => 'Banned'))->execute($connection);
list($role_id, $rows_affected) = \DB::insert($table.'_roles')->set(array('name' => 'banned', 'filter' => 'D'))->execute($connection);
\DB::insert($table.'_group_roles')->set(array('group_id' => $group_id, 'role_id' => $role_id))->execute($connection);
// create the 'Guests' group
list($group_id_guest, $rows_affected) = \DB::insert($table.'_groups')->set(array('name' => 'Guests'))->execute($connection);
list($role_id_guest, $rows_affected) = \DB::insert($table.'_roles')->set(array('name' => 'public'))->execute($connection);
\DB::insert($table.'_group_roles')->set(array('group_id' => $group_id_guest, 'role_id' => $role_id_guest))->execute($connection);
// create the 'Users' group
list($group_id, $rows_affected) = \DB::insert($table.'_groups')->set(array('name' => 'Users'))->execute($connection);
list($role_id_user, $rows_affected) = \DB::insert($table.'_roles')->set(array('name' => 'user'))->execute($connection);
\DB::insert($table.'_group_roles')->set(array('group_id' => $group_id, 'role_id' => $role_id_user))->execute($connection);
// create the 'Moderators' group
list($group_id, $rows_affected) = \DB::insert($table.'_groups')->set(array('name' => 'Moderators'))->execute($connection);
list($role_id_mod, $rows_affected) = \DB::insert($table.'_roles')->set(array('name' => 'moderator'))->execute($connection);
\DB::insert($table.'_group_roles')->set(array('group_id' => $group_id, 'role_id' => $role_id_user))->execute($connection);
\DB::insert($table.'_group_roles')->set(array('group_id' => $group_id, 'role_id' => $role_id_mod))->execute($connection);
// create the 'Administrators' group
list($group_id, $rows_affected) = \DB::insert($table.'_groups')->set(array('name' => 'Administrators'))->execute($connection);
list($role_id, $rows_affected) = \DB::insert($table.'_roles')->set(array('name' => 'administrator'))->execute($connection);
\DB::insert($table.'_group_roles')->set(array('group_id' => $group_id, 'role_id' => $role_id_user))->execute($connection);
\DB::insert($table.'_group_roles')->set(array('group_id' => $group_id, 'role_id' => $role_id_mod))->execute($connection);
\DB::insert($table.'_group_roles')->set(array('group_id' => $group_id, 'role_id' => $role_id))->execute($connection);
// create the 'Superadmins' group
list($group_id_admin, $rows_affected) = \DB::insert($table.'_groups')->set(array('name' => 'Super Admins'))->execute($connection);
list($role_id_admin, $rows_affected) = \DB::insert($table.'_roles')->set(array('name' => 'superadmin', 'filter' => 'A'))->execute($connection);
\DB::insert($table.'_group_roles')->set(array('group_id' => $group_id_admin, 'role_id' => $role_id_admin))->execute($connection);
/*
* create the default admin user, so we have initial access
*/
// create the administrator account if needed, and assign it the superadmin group so it has all access
$result = \DB::select('id')->from($table)->where('username', '=', 'admin')->execute($connection);
if (count($result) == 0)
{
\Auth::instance()->create_user('admin', 'admin', 'admin@example.org', $group_id_admin, array('fullname' => 'System administrator'));
}
// create the guest account
list($guest_id, $affected) = \DB::insert($table)->set(
array(
'username' => 'guest',
'password' => 'YOU CAN NOT USE THIS TO LOGIN',
'email' => '',
'group_id' => $group_id_guest,
'last_login' => 0,
'previous_login' => 0,
'login_hash' => '',
'user_id' => 0,
'created_at' => time(),
'updated_at' => 0,
)
)->execute($connection);
// adjust the id's, auto_increment doesn't want to create a key with value 0
\DB::update($table)->set(array('id' => 0))->where('id', '=', $guest_id)->execute($connection);
// add guests full name to the metadata
\DB::insert($table.'_metadata')->set(
array(
'parent_id' => 0,
'key' => 'fullname',
'value' => 'Guest',
)
)->execute($connection);
}
// reset any DBUtil connection set
$this->dbconnection(false);
}
function down()
{
// get the drivers defined
$drivers = normalize_driver_types();
if (in_array('Ormauth', $drivers))
{
// get the tablename
\Config::load('ormauth', true);
$table = \Config::get('ormauth.table_name', 'users');
// make sure the correct connection is used
$this->dbconnection('ormauth');
// empty the user, group and role tables
\DBUtil::truncate_table($table);
\DBUtil::truncate_table($table.'_groups');
\DBUtil::truncate_table($table.'_roles');
\DBUtil::truncate_table($table.'_group_roles');
}
// reset any DBUtil connection set
$this->dbconnection(false);
}
/**
* check if we need to override the db connection for auth tables
*/
protected function dbconnection($type = null)
{
static $connection;
switch ($type)
{
// switch to the override connection
case 'simpleauth':
case 'ormauth':
if ($connection = \Config::get($type.'.db_connection', null))
{
\DBUtil::set_connection($connection);
}
break;
// switch back to the configured migration connection, or the default one
case false:
if ($connection)
{
\DBUtil::set_connection(\Config::get('migrations.connection', null));
}
break;
default:
// noop
}
return $connection;
}
}