Update roles handling

This commit is contained in:
DariusIII
2018-07-30 13:37:12 +02:00
parent 92d5463749
commit a4fb61aa96
9 changed files with 193 additions and 334 deletions
+1
View File
@@ -1,4 +1,5 @@
2018-07-30 DariusIII
* Chg: Update roles handling
* Chg: Update User model, Utility and TmuxOutput classes and RegisterController
* Chg: Update vlucas/phpdotenv and imdbphp/imdbphp to latest versions
2018-07-27 DariusIII
+94 -3
View File
@@ -6,6 +6,7 @@ use App\Models\User;
use App\Models\Settings;
use Illuminate\Console\Command;
use App\Extensions\util\Versions;
use Spatie\Permission\Models\Role;
use Symfony\Component\Process\Process;
class InstallNntmux extends Command
@@ -122,6 +123,8 @@ class InstallNntmux extends Command
}
}
$this->createRoles();
if (! $error && $this->addAdminUser()) {
@file_put_contents(base_path().'/_install/install.lock', 'application install locked on '.now());
$this->info('Generating application key');
@@ -149,7 +152,7 @@ class InstallNntmux extends Command
/**
* @return bool
*/
protected function updatePatch(): bool
private function updatePatch(): bool
{
$ver = new Versions();
$patch = $ver->getSQLPatchFromFile();
@@ -175,7 +178,7 @@ class InstallNntmux extends Command
* @throws \Exception
* @throws \RuntimeException
*/
protected function updatePaths()
private function updatePaths()
{
$covers_path = base_path().'/resources/covers/';
$nzb_path = base_path().'/resources/nzb/';
@@ -217,10 +220,97 @@ class InstallNntmux extends Command
];
}
/**
*
*/
private function createRoles()
{
Role::create(['name' =>'User']);
Role::create(['name' =>'Admin']);
Role::create(['name' =>'Disabled']);
Role::create(['name' =>'Moderator']);
Role::create(['name' =>'Friend']);
Role::query()
->where('name', '=', 'User')
->update(
[
'apirequests' => 10,
'downloadrequests' => 10,
'defaultinvites' => 1,
'isdefault' => 1,
'canpreview' => 1,
'hideads' => 0,
'donation' => 0,
'addyears' => 0,
]
);
Role::query()
->where('name', '=', 'Admin')
->update(
[
'apirequests' => 1000,
'downloadrequests' => 1000,
'defaultinvites' => 1000,
'isdefault' => 0,
'canpreview' => 1,
'hideads' => 0,
'donation' => 0,
'addyears' => 0,
]
);
Role::query()
->where('name', '=', 'Disabled')
->update(
[
'apirequests' => 0,
'downloadrequests' => 0,
'defaultinvites' => 0,
'isdefault' => 0,
'canpreview' => 0,
'hideads' => 0,
'donation' => 0,
'addyears' => 0,
]
);
Role::query()
->where('name', '=', 'Moderator')
->update(
[
'apirequests' => 1000,
'downloadrequests' => 1000,
'defaultinvites' => 1000,
'isdefault' => 0,
'canpreview' => 1,
'hideads' => 0,
'donation' => 0,
'addyears' => 0,
]
);
Role::query()
->where('name', '=', 'Friend')
->update(
[
'apirequests' => 100,
'downloadrequests' => 100,
'defaultinvites' => 5,
'isdefault' => 0,
'canpreview' => 1,
'hideads' => 0,
'donation' => 0,
'addyears' => 0,
]
);
}
/**
* @return bool
*/
protected function addAdminUser(): bool
private function addAdminUser(): bool
{
if (env('ADMIN_USER') === '' || env('ADMIN_PASS') === '' || env('ADMIN_EMAIL') === '') {
$this->error('Admin user data cannot be empty! Please edit .env file and fill in admin user details and run this script again!');
@@ -231,6 +321,7 @@ class InstallNntmux extends Command
try {
User::add(env('ADMIN_USER'), env('ADMIN_PASS'), env('ADMIN_EMAIL'), 2, '', '', '', '');
} catch (\Exception $e) {
echo $e->getMessage();
$this->error('Unable to add admin user!');
return false;
+1 -1
View File
@@ -16,7 +16,7 @@ class IsAdmin
*/
public function handle($request, Closure $next)
{
if (Auth::user() && Auth::user()->user_roles_id === 2) {
if (Auth::user() && Auth::user()->hasRole('Admin')) {
return $next($request);
}
+16 -15
View File
@@ -8,6 +8,7 @@ use App\Mail\AccountExpired;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Traits\HasRoles;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Facades\Password;
@@ -158,7 +159,7 @@ class User extends Authenticatable
*/
public function role()
{
return $this->belongsTo(UserRole::class, 'user_roles_id');
return $this->belongsTo(Role::class, 'user_roles_id');
}
/**
@@ -268,7 +269,7 @@ class User extends Authenticatable
$res = self::query()->where('email', '<>', 'sharing@nZEDb.com');
if ($role !== '') {
$res->where('user_roles_id', $role);
$res->where('roles_id', $role);
}
if ($username !== '') {
@@ -322,7 +323,7 @@ class User extends Authenticatable
$userName = trim($userName);
$email = trim($email);
$rateLimit = UserRole::query()->where('id', $role)->value('rate_limit');
$rateLimit = Role::query()->where('id', $role)->value('rate_limit');
if (! self::isValidUsername($userName)) {
return self::ERR_SIGNUP_BADUNAME;
@@ -471,20 +472,18 @@ class User extends Authenticatable
if ($apiRequests) {
UserRequest::clearApiRequests(false);
$query = "
SELECT users.*, user_roles.name AS rolename, COUNT(user_requests.id) AS apirequests
SELECT users.*, COUNT(user_requests.id) AS apirequests
FROM users
INNER JOIN user_roles ON user_roles.id = users.user_roles_id
LEFT JOIN user_requests ON user_requests.users_id = users.id
WHERE users.id != 0 %s %s %s %s
WHERE users.id != 0 %s %s %s
AND email != 'sharing@nZEDb.com'
GROUP BY users.id
ORDER BY %s %s %s";
} else {
$query = '
SELECT users.*, user_roles.name AS rolename
SELECT users.*
FROM users
INNER JOIN user_roles ON user_roles.id = users.user_roles_id
WHERE 1=1 %s %s %s %s
WHERE 1=1 %s %s %s
ORDER BY %s %s %s';
}
$order = self::getBrowseOrder($orderBy);
@@ -495,7 +494,6 @@ class User extends Authenticatable
! empty($userName) ? 'AND users.username '.'LIKE '.DB::connection()->getPdo()->quote('%'.$userName.'%') : '',
! empty($email) ? 'AND users.email '.'LIKE '.DB::connection()->getPdo()->quote('%'.$email.'%') : '',
! empty($host) ? 'AND users.host '.'LIKE '.DB::connection()->getPdo()->quote('%'.$host.'%') : '',
(! empty($role) ? ('AND users.user_roles_id = '.$role) : ''),
$order[0],
$order[1],
($start === false ? '' : ('LIMIT '.$offset.' OFFSET '.$start))
@@ -863,7 +861,7 @@ class User extends Authenticatable
* @param $userName
* @param $password
* @param $email
* @param $role
* @param $role
* @param $notes
* @param $host
* @param int $invites
@@ -879,7 +877,7 @@ class User extends Authenticatable
return false;
}
$rateLimit = UserRole::query()->where('id', $role)->value('rate_limit');
$rateLimit = Role::query()->where('id', $role)->value('rate_limit');
if (\defined('NN_INSTALLER')) {
$storeips = '';
@@ -887,12 +885,11 @@ class User extends Authenticatable
$storeips = (int) Settings::settingValue('..storeuserips') === 1 ? $host : '';
}
return self::create(
$user = self::create(
[
'username' => $userName,
'password' => $password,
'email' => $email,
'user_roles_id' => $role,
'host' => $storeips,
'api_token' => md5(Password::getRepository()->createNewToken()),
'invites' => $invites,
@@ -901,7 +898,11 @@ class User extends Authenticatable
'notes' => $notes,
'rate_limit' => $rateLimit,
]
)->id;
);
$user->assignRole($role);
return $user->id;
}
/**
-165
View File
@@ -1,165 +0,0 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
/**
* App\Models\UserRole.
*
* @property int $id
* @property string $name
* @property int $apirequests
* @property int $downloadrequests
* @property int $defaultinvites
* @property bool $isdefault
* @property bool $canpreview
* @property bool $hideads
* @property int $donation
* @property int $addyears
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\RoleExcludedCategory[] $roleExcludedCategory
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\User[] $users
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\UserRole whereAddyears($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\UserRole whereApirequests($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\UserRole whereCanpreview($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\UserRole whereDefaultinvites($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\UserRole whereDonation($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\UserRole whereDownloadrequests($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\UserRole whereHideads($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\UserRole whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\UserRole whereIsdefault($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\UserRole whereName($value)
* @mixin \Eloquent
*/
class UserRole extends Model
{
/**
* @var bool
*/
public $timestamps = false;
/**
* @var bool
*/
protected $dateFormat = false;
/**
* @var array
*/
protected $guarded = [];
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function users()
{
return $this->hasMany(User::class, 'user_roles_id');
}
public function roleExcludedCategory()
{
return $this->hasMany(RoleExcludedCategory::class, 'user_roles_id');
}
/**
* @return \Illuminate\Database\Eloquent\Collection|static[]
*/
public static function getUsersByRole()
{
return self::query()->select(['name'])->withCount('users')->groupBy('name')->having('users_count', '>', 0)->orderBy('users_count', 'desc')->get();
}
/**
* @return array
*/
public static function getRoles(): array
{
return self::all()->toArray();
}
/**
* @param $id
*
* @return \Illuminate\Database\Eloquent\Model|null|static
*/
public static function getRoleById($id)
{
return self::query()->where('id', $id)->first();
}
/**
* @param $request
*
* @return int
*/
public static function addRole($request): int
{
return self::query()->insertGetId(
[
'name' => $request['name'],
'apirequests' => $request['apirequests'],
'downloadrequests' => $request['name'],
'defaultinvites' => $request['defaultinvites'],
'canpreview' => $request['canpreview'],
'hideads' => $request['hideads'],
'donation' => $request['donation'],
'addyears' => $request['addyears'],
'rate_limit' => $request['rate_limit'],
]
);
}
/**
* @param $request
*
* @return int
*/
public static function updateRole($request): int
{
User::query()->where('user_roles_id', $request['id'])->update(['rate_limit' => $request['rate_limit']]);
return self::query()->where('id', $request['id'])->update(
[
'name' => $request['name'],
'apirequests' => $request['apirequests'],
'isdefault' => $request['isdefault'],
'downloadrequests' => $request['downloadrequests'],
'defaultinvites' => $request['defaultinvites'],
'canpreview' => $request['canpreview'],
'hideads' => $request['hideads'],
'donation' => $request['donation'],
'addyears' => $request['addyears'],
'rate_limit' => $request['rate_limit'],
]
);
}
/**
* @param $id
* @return mixed
*/
public static function deleteRole($id)
{
$res = User::query()->where('user_roles_id', $id)->get(['id']);
if (\count($res) > 0) {
$userIds = [];
foreach ($res as $user) {
$userIds[] = $user['id'];
}
$defaultRole = self::getDefaultRole();
if ($defaultRole !== null) {
User::query()->whereIn('id', $userIds)->update(['user_roles_id' => $defaultRole->id]);
}
}
return self::query()->where('id', $id)->delete();
}
/**
* @return \Illuminate\Database\Eloquent\Model|null|static
*/
public static function getDefaultRole()
{
return self::query()->where('isdefault', '=', 1)->first();
}
}
-59
View File
@@ -1,59 +0,0 @@
<?php
return [
0 => [
'name' => 'User',
'apirequests' => 10,
'downloadrequests' => 10,
'defaultinvites' => 1,
'isdefault' => 1,
'canpreview' => 0,
'hideads' => 0,
'donation' => 0,
'addyears' => 0,
],
1 => [
'name' => 'Admin',
'apirequests' => 1000,
'downloadrequests' => 1000,
'defaultinvites' => 1000,
'isdefault' => 0,
'canpreview' => 1,
'hideads' => 0,
'donation' => 0,
'addyears' => 0,
],
2 => [
'name' => 'Disabled',
'apirequests' => 0,
'downloadrequests' => 0,
'defaultinvites' => 0,
'isdefault' => 0,
'canpreview' => 0,
'hideads' => 0,
'donation' => 0,
'addyears' => 0,
],
3 => [
'name' => 'Moderator',
'apirequests' => 1000,
'downloadrequests' => 1000,
'defaultinvites' => 1000,
'isdefault' => 0,
'canpreview' => 1,
'hideads' => 0,
'donation' => 0,
'addyears' => 0,
],
4 => [
'name' => 'Friend',
'apirequests' => 100,
'downloadrequests' => 100,
'defaultinvites' => 5,
'isdefault' => 0,
'canpreview' => 1,
'hideads' => 0,
'donation' => 0,
'addyears' => 0,
],
];
+1 -2
View File
@@ -12,7 +12,6 @@ class DatabaseSeeder extends Seeder
public function run()
{
// $this->call(UsersTableSeeder::class);
$this->call(UserRolesTableSeeder::class);
$this->call(CountriesSeeder::class);
$this->call(CategoriesTableSeeder::class);
$this->call(CategoryRegexesTableSeeder::class);
@@ -25,4 +24,4 @@ class DatabaseSeeder extends Seeder
$this->call(ReleaseNamingRegexesTableSeeder::class);
$this->call(SettingsTableSeeder::class);
}
}
}
-89
View File
@@ -1,89 +0,0 @@
<?php
use Illuminate\Database\Seeder;
class UserRolesTableSeeder extends Seeder
{
/**
* Auto generated seed file
*
* @return void
*/
public function run()
{
\DB::table('user_roles')->delete();
\DB::table('user_roles')->insert(array (
0 =>
array (
'id' => 1,
'name' => 'User',
'apirequests' => 10,
'downloadrequests' => 10,
'defaultinvites' => 1,
'isdefault' => 1,
'canpreview' => 0,
'hideads' => 0,
'donation' => 0,
'addyears' => 0,
),
1 =>
array (
'id' => 2,
'name' => 'Admin',
'apirequests' => 1000,
'downloadrequests' => 1000,
'defaultinvites' => 1000,
'isdefault' => 0,
'canpreview' => 1,
'hideads' => 0,
'donation' => 0,
'addyears' => 0,
),
2 =>
array (
'id' => 3,
'name' => 'Disabled',
'apirequests' => 0,
'downloadrequests' => 0,
'defaultinvites' => 0,
'isdefault' => 0,
'canpreview' => 0,
'hideads' => 0,
'donation' => 0,
'addyears' => 0,
),
3 =>
array (
'id' => 4,
'name' => 'Moderator',
'apirequests' => 1000,
'downloadrequests' => 1000,
'defaultinvites' => 1000,
'isdefault' => 0,
'canpreview' => 1,
'hideads' => 0,
'donation' => 0,
'addyears' => 0,
),
4 =>
array (
'id' => 5,
'name' => 'Friend',
'apirequests' => 100,
'downloadrequests' => 100,
'defaultinvites' => 5,
'isdefault' => 0,
'canpreview' => 1,
'hideads' => 0,
'donation' => 0,
'addyears' => 0,
),
));
}
}
@@ -0,0 +1,80 @@
# Add new user permission related tables
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS roles;
CREATE TABLE roles (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
guard_name varchar(255) NOT NULL,
apirequests int(10) unsigned NOT NULL,
rate_limit int(11) NOT NULL DEFAULT 60,
downloadrequests int(10) unsigned NOT NULL,
defaultinvites int(10) unsigned NOT NULL,
isdefault tinyint(1) NOT NULL DEFAULT 0,
canpreview tinyint(1) NOT NULL DEFAULT 0,
hideads tinyint(1) NOT NULL DEFAULT 0,
donation int(11) NOT NULL DEFAULT 0,
addyears int(11) NOT NULL DEFAULT 0,
created_at timestamp NULL DEFAULT NULL,
updated_at timestamp NULL DEFAULT NULL,
PRIMARY KEY (id)
)
ENGINE=InnoDB
AUTO_INCREMENT=1
DEFAULT CHARSET=utf8
COLLATE=utf8_unicode_ci;
DROP TABLE IF EXISTS role_has_permissions;
CREATE TABLE role_has_permissions (
permission_id int(10) unsigned NOT NULL,
role_id int(10) unsigned NOT NULL,
PRIMARY KEY (permission_id,role_id),
KEY role_has_permissions_role_id_foreign (role_id),
CONSTRAINT role_has_permissions_permission_id_foreign FOREIGN KEY (permission_id) REFERENCES permissions (id) ON DELETE CASCADE,
CONSTRAINT role_has_permissions_role_id_foreign FOREIGN KEY (role_id) REFERENCES roles (id) ON DELETE CASCADE
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8
COLLATE=utf8_unicode_ci;
DROP TABLE IF EXISTS permissions;
CREATE TABLE permissions (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
guard_name varchar(255) NOT NULL,
created_at timestamp NULL DEFAULT NULL,
updated_at timestamp NULL DEFAULT NULL,
PRIMARY KEY (id)
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8
COLLATE=utf8_unicode_ci;
DROP TABLE IF EXISTS model_has_permissions;
CREATE TABLE model_has_permissions (
permission_id int(10) unsigned NOT NULL,
model_type varchar(255) NOT NULL,
model_id bigint(20) unsigned NOT NULL,
PRIMARY KEY (permission_id,model_id,model_type),
KEY model_has_permissions_model_type_model_id_index (model_type,model_id),
CONSTRAINT model_has_permissions_permission_id_foreign FOREIGN KEY (permission_id) REFERENCES permissions (id) ON DELETE CASCADE
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8
COLLATE=utf8_unicode_ci;
DROP TABLE IF EXISTS model_has_roles;
CREATE TABLE model_has_roles (
role_id int(10) unsigned NOT NULL,
model_type varchar(255) COLLATE utf8_unicode_ci NOT NULL,
model_id bigint(20) unsigned NOT NULL,
PRIMARY KEY (role_id,model_id,model_type),
KEY model_has_roles_model_type_model_id_index (model_type,model_id),
CONSTRAINT model_has_roles_role_id_foreign FOREIGN KEY (role_id) REFERENCES roles (id) ON DELETE CASCADE
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8
COLLATE=utf8_unicode_ci;
SET FOREIGN_KEY_CHECKS = 1;