diff --git a/Changelog b/Changelog index ec418b45e..78910c0d7 100755 --- a/Changelog +++ b/Changelog @@ -1,4 +1,5 @@ 2018-08-05 DariusIII + * Chg: Update Controllers and templates for user related permission changes * Chg: Add custom ClearanceMiddleware * Chg: Add custom 401 error page * Chg: Add custom permission error handling diff --git a/app/Http/Controllers/BasePageController.php b/app/Http/Controllers/BasePageController.php index 861d972be..f79773c6a 100644 --- a/app/Http/Controllers/BasePageController.php +++ b/app/Http/Controllers/BasePageController.php @@ -214,6 +214,7 @@ class BasePageController extends Controller abort(429, $retry); } + public function render() { $this->smarty->display($this->page_template); @@ -284,11 +285,7 @@ class BasePageController extends Controller $this->smarty->assign('recentforumpostslist', Forumpost::getPosts(Settings::settingValue('..showrecentforumposts'))); } - if (! empty($this->userdata)) { - $parentcatlist = Category::getForMenu($this->userdata['categoryexclusions'], $this->userdata['rolecategoryexclusions']); - } else { - $parentcatlist = Category::getForMenu(); - } + $parentcatlist = Category::getForMenu(); $this->smarty->assign('parentcatlist', $parentcatlist); $this->smarty->assign('catClass', Category::class); diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index 993a235e9..e2dec4704 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -174,6 +174,8 @@ class ProfileController extends BasePageController $sab->setCookie($request->input('saburl'), $request->input('sabapikey'), $request->input('sabpriority'), $request->input('sabapikeytype')); } + $user = User::find($userid); + User::updateUser( $userid, $data['username'], @@ -203,8 +205,69 @@ class ProfileController extends BasePageController (int) Settings::settingValue('site.main.userselstyle') === 1 ? $request->input('style') : 'None' ); - $request->merge(['exccat' => (! $request->has('exccat') || ! \is_array($request->input('exccat'))) ? [] : $request->input('exccat')]); - UserExcludedCategory::addCategoryExclusions($userid, $request->input('exccat')); + if ((int) $request->input('viewconsole') === 1 && $user->role->hasPermissionTo('view console') === true && $user->hasDirectPermission('view console') === false) { + $user->givePermissionTo('view console'); + } elseif ((int) $request->input('viewconsole') === 0 && $user->role->hasPermissionTo('view console') === true && $user->hasPermissionTo('view console') === true) { + $user->revokePermissionTo('view console'); + } elseif ($user->role->hasPermissionTo('view console') === false && $user->hasDirectPermission('view console') === true && ((int) $request->input('viewconsole') === 0 || (int) $request->input('viewconsole') === 1)) { + $user->revokePermissionTo('view console'); + } + + if ((int) $request->input('viewmovies') === 1 && $user->role->hasPermissionTo('view movies') === true && $user->hasDirectPermission('view movies') === false) { + $user->givePermissionTo('view movies'); + } elseif ((int) $request->input('viewmovies') === 0 && $user->role->hasPermissionTo('view movies') === true && $user->hasDirectPermission('view movies') === true) { + $user->revokePermissionTo('view movies'); + } elseif ($user->role->hasPermissionTo('view movies') === false && $user->hasDirectPermission('view movies') === true && ((int) $request->input('viewmovies') === 0 || (int) $request->input('viewmovies') === 1)) { + $user->revokePermissionTo('view movies'); + } + + if ((int) $request->input('viewaudio') === 1 && $user->role->hasPermissionTo('view audio') === true && $user->hasDirectPermission('view audio') === false) { + $user->givePermissionTo('view audio'); + } elseif ((int) $request->input('viewaudio') === 0 && $user->role->hasPermissionTo('view audio') === true && $user->hasDirectPermission('view audio') === true) { + $user->revokePermissionTo('view audio'); + } elseif ($user->role->hasPermissionTo('view audio') === false && $user->hasDirectPermission('view audio') === true && ((int) $request->input('viewaudio') === 0 || (int) $request->input('viewaudio') === 1)) { + $user->revokePermissionTo('view audio'); + } + + if ((int) $request->input('viewpc') === 1 && $user->role->hasPermissionTo('view pc') === true && $user->hasDirectPermission('view pc') === false) { + $user->givePermissionTo('view pc'); + } elseif ((int) $request->input('viewpc') === 0 && $user->role->hasPermissionTo('view pc') === true && $user->hasDirectPermission('view pc') === true) { + $user->revokePermissionTo('view pc'); + } elseif ($user->role->hasPermissionTo('view pc') === false && $user->hasDirectPermission('view pc') === true && ((int) $request->input('viewpc') === 0 || (int) $request->input('viewpc') === 1)) { + $user->revokePermissionTo('view pc'); + } + + if ((int) $request->input('viewtv') === 1 && $user->role->hasPermissionTo('view tv') === true && $user->hasDirectPermission('view tv') === false) { + $user->givePermissionTo('view tv'); + } elseif ((int) $request->input('viewtv') === 0 && $user->role->hasPermissionTo('view tv') === true && $user->hasDirectPermission('view tv') === true) { + $user->revokePermissionTo('view tv'); + } elseif ($user->role->hasPermissionTo('view tv') === false && $user->hasDirectPermission('view tv') === true && ((int) $request->input('viewtv') === 0 || (int) $request->input('viewtv') === 1)) { + $user->revokePermissionTo('view tv'); + } + + if ((int) $request->input('viewadult') === 1 && $user->role->hasPermissionTo('view adult') === true && $user->hasDirectPermission('view adult') === false) { + $user->givePermissionTo('view adult'); + } elseif ((int) $request->input('viewadult') === 0 && $user->role->hasPermissionTo('view adult') === true && $user->hasDirectPermission('view adult') === true) { + $user->revokePermissionTo('view adult'); + } elseif ($user->role->hasPermissionTo('view adult') === false && $user->hasDirectPermission('view adult') === true && ((int) $request->input('viewadult') === 0 || (int) $request->input('viewadult') === 1)) { + $user->revokePermissionTo('view adult'); + } + + if ((int) $request->input('viewbooks') === 1 && $user->role->hasPermissionTo('view books') === true && $user->hasDirectPermission('view books') === false) { + $user->givePermissionTo('view books'); + } elseif ((int) $request->input('viewbooks') === 0 && $user->role->hasPermissionTo('view books') === true && $user->hasDirectPermission('view books') === true) { + $user->revokePermissionTo('view books'); + } elseif ($user->role->hasPermissionTo('view books') === false && $user->hasDirectPermission('view books') === true && ((int) $request->input('viewbooks') === 0 || (int) $request->input('viewbooks') === 1)) { + $user->revokePermissionTo('view books'); + } + + if ((int) $request->input('viewother') === 1 && $user->role->hasPermissionTo('view other') === true && $user->hasDirectPermission('view other') === false) { + $user->givePermissionTo('view other'); + } elseif ((int) $request->input('viewother') === 0 && $user->role->hasPermissionTo('view other') === true && $user->hasDirectPermission('view other') === true) { + $user->revokePermissionTo('view other'); + } elseif ($user->role->hasPermissionTo('view other') === false && $user->hasDirectPermission('view other') === true && ((int) $request->input('viewother') === 0 || (int) $request->input('viewother') === 1)) { + $user->revokePermissionTo('view other'); + } if ($request->has('password') && ! empty($request->input('password'))) { User::updatePassword($userid, $request->input('password')); @@ -275,6 +338,8 @@ class ProfileController extends BasePageController $this->smarty->assign('cp_url_selected', $data['cp_url']); $this->smarty->assign('cp_api_selected', $data['cp_api']); + $this->smarty->assign('yesno_ids', [1, 0]); + $this->smarty->assign('yesno_names', ['Yes', 'No']); $this->smarty->assign('catlist', Category::getForSelect(false)); diff --git a/app/Http/Controllers/RssController.php b/app/Http/Controllers/RssController.php index 98388acae..05cda8a5a 100644 --- a/app/Http/Controllers/RssController.php +++ b/app/Http/Controllers/RssController.php @@ -49,7 +49,7 @@ class RssController extends BasePageController $this->smarty->assign( [ 'categorylist' => Category::getCategories(true, $this->userdata['categoryexclusions']), - 'parentcategorylist' => Category::getForMenu($this->userdata['categoryexclusions']), + 'parentcategorylist' => Category::getForMenu(), ] ); diff --git a/app/Models/Category.php b/app/Models/Category.php index a266ba434..3ef39aa70 100644 --- a/app/Models/Category.php +++ b/app/Models/Category.php @@ -446,27 +446,13 @@ class Category extends Model } /** - * @param array $excludedCats - * - * @param array $roleExcludedCats - * * @return array */ - public static function getForMenu(array $excludedCats = [], array $roleExcludedCats = []): array + public static function getForMenu(): array { $ret = []; - $sql = self::query()->remember(config('nntmux.cache_expiry_long'))->where('status', '=', self::STATUS_ACTIVE); - - if (\count($excludedCats) > 0 && \count($roleExcludedCats) === 0) { - $sql->whereNotIn('id', $excludedCats); - } elseif (\count($excludedCats) > 0 && \count($roleExcludedCats) > 0) { - $sql->whereNotIn('id', $excludedCats += $roleExcludedCats); - } elseif (\count($excludedCats) === 0 && \count($roleExcludedCats) > 0) { - $sql->whereNotIn('id', $roleExcludedCats); - } - - $arr = $sql->get()->toArray(); + $arr = self::query()->remember(config('nntmux.cache_expiry_long'))->where('status', '=', self::STATUS_ACTIVE)->get()->toArray(); foreach ($arr as $key => $val) { if ($val['id'] === self::OTHER_ROOT) { diff --git a/misc/run_me_once/updateUserRoles.php b/misc/run_me_once/updateUserRoles.php index 167ad574e..ce5f7a5f4 100644 --- a/misc/run_me_once/updateUserRoles.php +++ b/misc/run_me_once/updateUserRoles.php @@ -11,9 +11,9 @@ $users = User::all(); $oldRoles = DB::table('user_roles')->get()->toArray(); -$roles = array_pluck(Role::query()->get(['name'])->toArray(), 'name'); +$roles = Role::all()->pluck('name')->toArray(); -$permissions = array_pluck(Permission::query()->select('name')->get()->toArray(), 'name'); +$permissions = Permission::all()->pluck('name')->toArray(); $neededPerms = ['preview', 'hideads', 'edit release', 'view console', 'view movies', 'view audio', 'view pc', 'view tv', 'view adult', 'view books', 'view other']; diff --git a/resources/views/themes/Gentele/basepage.tpl b/resources/views/themes/Gentele/basepage.tpl index 9105b3b3e..43e7a8a6e 100755 --- a/resources/views/themes/Gentele/basepage.tpl +++ b/resources/views/themes/Gentele/basepage.tpl @@ -77,31 +77,31 @@
  • Browse
  • {/if} - {if $parentcat.id == {$catClass::MOVIE_ROOT} && $userdata->hasPermissionTo('view movies') == true} + {if $parentcat.id == {$catClass::MOVIE_ROOT} && $userdata->hasDirectPermission('view movies') == true && $userdata->hasPermissionTo('view movies') == true} {/if} - {if $parentcat.id == {$catClass::GAME_ROOT} && $userdata->hasPermissionTo('view console') == true} + {if $parentcat.id == {$catClass::GAME_ROOT} && $userdata->hasDirectPermission('view console') == true && $userdata->hasPermissionTo('view console') == true} {/if} - {if $parentcat.id == {$catClass::PC_ROOT} && $userdata->hasPermissionTo('view pc') == true} + {if $parentcat.id == {$catClass::PC_ROOT} && $userdata->hasDirectPermission('view pc') == true && $userdata->hasPermissionTo('view pc') == true} {/if} - {if $parentcat.id == {$catClass::MUSIC_ROOT} && $userdata->hasPermissionTo('view audio') == true} + {if $parentcat.id == {$catClass::MUSIC_ROOT} && $userdata->hasDirectPermission('view audio') == true && $userdata->hasPermissionTo('view audio') == true} {/if} - {if $parentcat.id == {$catClass::BOOKS_ROOT} && $userdata->hasPermissionTo('view books') == true} + {if $parentcat.id == {$catClass::BOOKS_ROOT} && $userdata->hasDirectPermission('view books') == true && $userdata->hasPermissionTo('view books') == true} {/if} - {if $parentcat.id == {$catClass::XXX_ROOT} && $userdata->hasPermissionTo('view adult') == true} + {if $parentcat.id == {$catClass::XXX_ROOT} && $userdata->hasDirectPermission('view adult') == true && $userdata->hasPermissionTo('view adult') == true} {/if} - {if $parentcat.id == {$catClass::OTHER_ROOT} && $userdata->hasPermissionTo('view other') == true} + {if $parentcat.id == {$catClass::OTHER_ROOT} && $userdata->hasDirectPermission('view other') == true && $userdata->hasPermissionTo('view other') == true}