diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 0b860c857..ecbd758c1 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -188,9 +188,9 @@ class LoginController extends Controller * @param charId */ private function SetRole($role, $charId) { - $permission = new UserPermission; + $permission = new UserRole; $permission->character_id = $charId; - $permission->permission = $role; + $permission->role = $role; $permission->save(); } @@ -235,13 +235,13 @@ class LoginController extends Controller private function GetRole($refreshToken, $charId) { $accountType = $this->GetAccountType($refreshToken, $charId); if($accountType == 'Guest') { - $role = 'role.guest'; + $role = 'Guest'; } else if($accountType == 'Legacy'){ - $role = 'role.user'; + $role = 'User'; } else if($accountType == 'W4RP') { - $role = 'role.user'; + $role = 'User'; } else { - $role = 'role.none'; + $role = 'None'; } return $role; diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 46fbcceb4..6807bbf4c 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -61,6 +61,7 @@ class Kernel extends HttpKernel 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 'callback' => \App\Http\Middleware\Callback::class, + 'role' => \App\Http\Middleware\RequireRole::class, 'permission' => \App\Http\Middleware\RequirePermission::class, ]; } diff --git a/app/Http/Middleware/RequirePermission.php b/app/Http/Middleware/RequirePermission.php index 6947000cd..1a67d59db 100644 --- a/app/Http/Middleware/RequirePermission.php +++ b/app/Http/Middleware/RequirePermission.php @@ -18,58 +18,11 @@ class RequirePermission */ public function handle($request, Closure $next, $permission) { - $confirmed = false; - if(strpos($permission, 'role.') !== false) { - $confirmed = $this->CheckRole($permission); - } else { - $confirmed = $this->CheckPermission($permission); - } - if($confirmed === false) { - abort(403, "You don't have permission to access this area."); - } + $perms = UserPermission::where(['character_id' => auth()->user()->character_id, 'permission'=> $permission])->get(['permission']); + + abort_unless(auth()->check() && isset($perms[0]->permission), 403, "You don't have the correct permission to be in this area."); return $next($request); } - - private function CheckPermission($permission) { - $confirmed = false; - - $checks = UserPermission::where(['character_id' => auth()->user()->character_id, 'permission' => $permission])->get(['permission']); - foreach($checks as $check) { - if($check === $permission) { - return true; - } - } - - return false; - } - - private function CheckRole($role) { - $confirmed = false; - - $ranking = [ - 'role.none' => 0, - 'role.guest' => 1, - 'role.user' => 2, - 'role.director' => 3, - 'role.admin' => 4, - ]; - //Using eloquent let's get the roles for the character - $checks = UserPermission::where('character_id', auth()->user()->character_id)->get(['permission']); - - foreach($checks as $check) { - if(!isset($check->permission)) { - abort(403, "You don't have the correct role to view this area."); - } - - if(strpos($role, 'role.') !== false) { - if($ranking[$check->permission] >= $ranking[$role]) { - $confirmed = true; - } - } - } - - return $confirmed; - } } diff --git a/app/Http/Middleware/RequireRole.php b/app/Http/Middleware/RequireRole.php new file mode 100644 index 000000000..366193416 --- /dev/null +++ b/app/Http/Middleware/RequireRole.php @@ -0,0 +1,42 @@ + 0, + 'Guest' => 1, + 'User' => 2, + 'Admin' => 3, + 'SuperUser' => 4, + ]; + + $check = UserPermission::where('character_id', auth()->user()->character_id)->get(['role']); + + if(!isset($check[0]->role)) { + abort(403, "You don't any roles. You don't belong here."); + } + + if($ranking[$check->permission] >= $ranking[$role]) { + $confirmed = true; + } + + abort_unless(auth()->check() && $confirmed, 403, "You don't have the correct role to be in this area."); + + return $next($request); + } +} diff --git a/app/Models/User/UserRole.php b/app/Models/User/UserRole.php new file mode 100644 index 000000000..b726e8d60 --- /dev/null +++ b/app/Models/User/UserRole.php @@ -0,0 +1,19 @@ +belongsTo(User::class); + } +} diff --git a/app/User.php b/app/User.php index d158f57e4..0d1c18da6 100644 --- a/app/User.php +++ b/app/User.php @@ -52,6 +52,10 @@ class User extends Authenticatable return User::where('user_type')->get(); } + public function role() { + return $this->hasOne('\App\Models\User\UserRole', 'character_id', 'character_id'); + } + public function permissions() { return $this->hasMany('App\Models\User\UserPermission', 'character_id'); } diff --git a/database/migrations/2019_01_09_131616_create_users_role_table.php b/database/migrations/2019_01_09_131616_create_users_role_table.php new file mode 100644 index 000000000..edac82746 --- /dev/null +++ b/database/migrations/2019_01_09_131616_create_users_role_table.php @@ -0,0 +1,37 @@ +increments('id'); + $table->integer('character_id')->unsigned(); + $table->foreign('character_id')->references('character_id')->on('users'); + $table->string('role')->default('None'); + + $table->timestamps(); + }); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('user_roles'); + } +} diff --git a/resources/views/layouts/navbar.blade.php b/resources/views/layouts/navbar.blade.php index 8fca5e64a..7fdb573ca 100644 --- a/resources/views/layouts/navbar.blade.php +++ b/resources/views/layouts/navbar.blade.php @@ -8,14 +8,14 @@