diff --git a/app/Http/Controllers/Admin/ActivityLogController.php b/app/Http/Controllers/Admin/ActivityLogController.php index 2b061094..25978a37 100644 --- a/app/Http/Controllers/Admin/ActivityLogController.php +++ b/app/Http/Controllers/Admin/ActivityLogController.php @@ -14,6 +14,7 @@ use Spatie\Activitylog\Models\Activity; class ActivityLogController extends Controller { + const VIEW_PERMISSION = "admin.logs.read"; /** * Display a listing of the resource. * @@ -21,6 +22,9 @@ class ActivityLogController extends Controller */ public function index(Request $request) { + $this->checkPermission(self::VIEW_PERMISSION); + + $cronLogs = Storage::disk('logs')->exists('cron.log') ? Storage::disk('logs')->get('cron.log') : null; if ($request->input('search')) { diff --git a/app/Http/Controllers/Admin/ApplicationApiController.php b/app/Http/Controllers/Admin/ApplicationApiController.php index f037efe8..f6c00bbd 100644 --- a/app/Http/Controllers/Admin/ApplicationApiController.php +++ b/app/Http/Controllers/Admin/ApplicationApiController.php @@ -16,6 +16,8 @@ use Illuminate\Http\Response; class ApplicationApiController extends Controller { + const READ_PERMISSION = "admin.api.read"; + const WRITE_PERMISSION = "admin.api.write"; /** * Display a listing of the resource. * @@ -23,6 +25,8 @@ class ApplicationApiController extends Controller */ public function index(LocaleSettings $locale_settings) { + $this->checkPermission(self::READ_PERMISSION); + return view('admin.api.index', [ 'locale_datatables' => $locale_settings->datatables ]); @@ -35,6 +39,8 @@ class ApplicationApiController extends Controller */ public function create() { + $this->checkPermission(self::WRITE_PERMISSION); + return view('admin.api.create'); } @@ -76,6 +82,7 @@ class ApplicationApiController extends Controller */ public function edit(ApplicationApi $applicationApi) { + $this->checkPermission(self::WRITE_PERMISSION); return view('admin.api.edit', [ 'applicationApi' => $applicationApi, ]); @@ -107,6 +114,8 @@ class ApplicationApiController extends Controller */ public function destroy(ApplicationApi $applicationApi) { + $this->checkPermission(self::WRITE_PERMISSION); + $applicationApi->delete(); return redirect()->back()->with('success', __('api key has been removed!')); diff --git a/app/Http/Controllers/Admin/LegalController.php b/app/Http/Controllers/Admin/LegalController.php index 0eafca57..27c858fb 100644 --- a/app/Http/Controllers/Admin/LegalController.php +++ b/app/Http/Controllers/Admin/LegalController.php @@ -10,6 +10,8 @@ use Qirolab\Theme\Theme; class LegalController extends Controller { + const READ_PERMISSION = "admin.legal.read"; + const WRITE_PERMISSION = "admin.legal.write"; /** * Display * @@ -17,6 +19,8 @@ class LegalController extends Controller */ public function index() { + $this->checkPermission(self::READ_PERMISSION); + $tos = File::get(Theme::path($path = 'views', "default") . '/information/tos-content.blade.php'); $privacy = File::get(Theme::path($path = 'views', "default") . '/information/privacy-content.blade.php'); $imprint = File::get(Theme::path($path = 'views', "default") . '/information/imprint-content.blade.php'); @@ -29,6 +33,8 @@ class LegalController extends Controller } public function update(Request $request){ + $this->checkPermission(self::READ_PERMISSION); + $tos = $request->tos; $privacy = $request->privacy; $imprint = $request->imprint; diff --git a/app/Http/Controllers/Admin/OverViewController.php b/app/Http/Controllers/Admin/OverViewController.php index eac33d02..90cd9307 100644 --- a/app/Http/Controllers/Admin/OverViewController.php +++ b/app/Http/Controllers/Admin/OverViewController.php @@ -19,6 +19,8 @@ use Carbon\Carbon; class OverViewController extends Controller { + const READ_PERMISSION = "admin.overview.read"; + const SYNC_PERMISSION = "admin.overview.sync"; public const TTL = 86400; private $pterodactyl; @@ -27,9 +29,11 @@ class OverViewController extends Controller { $this->pterodactyl = new PterodactylClient($ptero_settings); } - + public function index(GeneralSettings $general_settings) { + $this->checkPermission(self::READ_PERMISSION); + //Get counters $counters = collect(); //Set basic variables in the collection @@ -225,6 +229,8 @@ class OverViewController extends Controller */ public function syncPterodactyl() { + $this->checkPermission(self::SYNC_PERMISSION); + Node::syncNodes(); Egg::syncEggs(); diff --git a/app/Http/Controllers/Admin/PartnerController.php b/app/Http/Controllers/Admin/PartnerController.php index cea2aec2..5c4a6bab 100644 --- a/app/Http/Controllers/Admin/PartnerController.php +++ b/app/Http/Controllers/Admin/PartnerController.php @@ -11,8 +11,12 @@ use Illuminate\Http\Request; class PartnerController extends Controller { + const READ_PERMISSION = "admin.partners.read"; + const WRITE_PERMISSION = "admin.partners.write"; public function index(LocaleSettings $locale_settings) { + $this->checkPermission(self::READ_PERMISSION); + return view('admin.partners.index', [ 'locale_datatables' => $locale_settings->datatables ]); @@ -25,6 +29,8 @@ class PartnerController extends Controller */ public function create() { + $this->checkPermission(self::WRITE_PERMISSION); + return view('admin.partners.create', [ 'partners' => PartnerDiscount::get(), 'users' => User::orderBy('name')->get(), @@ -62,6 +68,8 @@ class PartnerController extends Controller */ public function edit(PartnerDiscount $partner) { + $this->checkPermission(self::WRITE_PERMISSION); + return view('admin.partners.edit', [ 'partners' => PartnerDiscount::get(), 'partner' => $partner, @@ -98,6 +106,8 @@ class PartnerController extends Controller */ public function destroy(PartnerDiscount $partner) { + $this->checkPermission(self::WRITE_PERMISSION); + $partner->delete(); return redirect()->back()->with('success', __('partner has been removed!')); diff --git a/app/Http/Controllers/Admin/PaymentController.php b/app/Http/Controllers/Admin/PaymentController.php index 02d91bde..543cdcf6 100644 --- a/app/Http/Controllers/Admin/PaymentController.php +++ b/app/Http/Controllers/Admin/PaymentController.php @@ -24,11 +24,15 @@ use App\Settings\LocaleSettings; class PaymentController extends Controller { const BUY_PERMISSION = 'user.shop.buy'; + const VIEW_PERMISSION = "admin.payments.read"; /** * @return Application|Factory|View */ public function index(LocaleSettings $locale_settings) { + $this->checkPermission(self::VIEW_PERMISSION); + + return view('admin.payments.index')->with([ 'payments' => Payment::paginate(15), 'locale_datatables' => $locale_settings->datatables diff --git a/app/Http/Controllers/Admin/ProductController.php b/app/Http/Controllers/Admin/ProductController.php index f26691e3..3dc95829 100644 --- a/app/Http/Controllers/Admin/ProductController.php +++ b/app/Http/Controllers/Admin/ProductController.php @@ -19,6 +19,10 @@ use Illuminate\Http\Request; class ProductController extends Controller { + const READ_PERMISSION = "admin.products.read"; + const WRITE_PERMISSION = "admin.products.write"; + const EDIT_PERMISSION = "admin.products.edit"; + const DELETE_PERMISSION = "admin.products.delete"; /** * Display a listing of the resource. * @@ -26,6 +30,8 @@ class ProductController extends Controller */ public function index(LocaleSettings $locale_settings) { + $this->checkPermission(self::READ_PERMISSION); + return view('admin.products.index', [ 'locale_datatables' => $locale_settings->datatables ]); @@ -38,6 +44,7 @@ class ProductController extends Controller */ public function create(GeneralSettings $general_settings) { + $this->checkPermission(self::WRITE_PERMISSION); return view('admin.products.create', [ 'locations' => Location::with('nodes')->get(), 'nests' => Nest::with('eggs')->get(), @@ -47,6 +54,8 @@ class ProductController extends Controller public function clone(Product $product) { + $this->checkPermission(self::WRITE_PERMISSION); + return view('admin.products.create', [ 'product' => $product, 'locations' => Location::with('nodes')->get(), @@ -98,6 +107,8 @@ class ProductController extends Controller */ public function show(Product $product, UserSettings $user_settings, GeneralSettings $general_settings) { + $this->checkPermission(self::READ_PERMISSION); + return view('admin.products.show', [ 'product' => $product, 'minimum_credits' => $user_settings->min_credits_to_make_server, @@ -113,6 +124,8 @@ class ProductController extends Controller */ public function edit(Product $product, GeneralSettings $general_settings) { + $this->checkPermission(self::EDIT_PERMISSION); + return view('admin.products.edit', [ 'product' => $product, 'locations' => Location::with('nodes')->get(), @@ -167,6 +180,8 @@ class ProductController extends Controller */ public function disable(Product $product) { + $this->checkPermission(self::WRITE_PERMISSION); + $product->update(['disabled' => ! $product->disabled]); return redirect()->route('admin.products.index')->with('success', 'Product has been updated!'); @@ -180,6 +195,8 @@ class ProductController extends Controller */ public function destroy(Product $product) { + $this->checkPermission(self::DELETE_PERMISSION); + $servers = $product->servers()->count(); if ($servers > 0) { return redirect()->back()->with('error', "Product cannot be removed while it's linked to {$servers} servers"); diff --git a/app/Http/Controllers/Admin/RoleController.php b/app/Http/Controllers/Admin/RoleController.php index ed4194be..3850c180 100644 --- a/app/Http/Controllers/Admin/RoleController.php +++ b/app/Http/Controllers/Admin/RoleController.php @@ -16,6 +16,10 @@ use Spatie\Permission\Models\Role; class RoleController extends Controller { + const READ_PERMISSION = "admin.roles.read"; + const CREATE_PERMISSION = "admin.roles.create"; + const EDIT_PERMISSION = "admin.roles.edit"; + const DELETE_PERMISSION = "admin.roles.delete"; /** * Display a listing of the resource. * @@ -26,6 +30,7 @@ class RoleController extends Controller public function index(Request $request) { + $this->checkPermission(self::READ_PERMISSION); //datatables if ($request->ajax()) { @@ -43,6 +48,7 @@ class RoleController extends Controller */ public function create() { + $this->checkPermission(self::CREATE_PERMISSION); $permissions = Permission::all(); @@ -56,6 +62,8 @@ class RoleController extends Controller */ public function store(Request $request): RedirectResponse { + $this->checkPermission(self::CREATE_PERMISSION); + $role = Role::create([ 'name' => $request->name, 'color' => $request->color @@ -86,6 +94,7 @@ class RoleController extends Controller */ public function edit(Role $role) { + $this->checkPermission(self::EDIT_PERMISSION); $permissions = Permission::all(); @@ -100,6 +109,8 @@ class RoleController extends Controller */ public function update(Request $request, Role $role) { + $this->checkPermission(self::EDIT_PERMISSION); + if ($request->permissions) { if($role->id != 1){ //disable admin permissions change $role->syncPermissions($request->permissions); @@ -135,6 +146,7 @@ class RoleController extends Controller */ public function destroy(Role $role) { + $this->checkPermission(self::DELETE_PERMISSION); if($role->id == 1 || $role->id == 3 || $role->id == 4){ //cannot delete the hard coded roles return back()->with("error","You cannot delete that role"); diff --git a/app/Http/Controllers/Admin/ServerController.php b/app/Http/Controllers/Admin/ServerController.php index 8e2475f5..6fb3266a 100644 --- a/app/Http/Controllers/Admin/ServerController.php +++ b/app/Http/Controllers/Admin/ServerController.php @@ -20,6 +20,13 @@ use Illuminate\Support\Facades\Log; class ServerController extends Controller { + + const READ_PERMISSION = "admin.servers.read"; + const WRITE_PERMISSION = "admin.servers.write"; + const SUSPEND_PERMISSION = "admin.servers.suspend"; + const CHANGEOWNER_PERMISSION = "admin.servers.write.owner"; + const CHANGE_IDENTIFIER_PERMISSION ="admin.servers.write.identifier"; + const DELETE_PERMISSION = "admin.servers.delete"; private $pterodactyl; public function __construct(PterodactylSettings $ptero_settings) @@ -34,6 +41,8 @@ class ServerController extends Controller */ public function index(LocaleSettings $locale_settings) { + $this->checkPermission(self::READ_PERMISSION); + return view('admin.servers.index', [ 'locale_datatables' => $locale_settings->datatables ]); @@ -47,6 +56,8 @@ class ServerController extends Controller */ public function edit(Server $server) { + $this->checkPermission(self::WRITE_PERMISSION); + // get all users from the database $users = User::all(); @@ -70,7 +81,7 @@ class ServerController extends Controller ]); - if ($request->get('user_id') != $server->user_id) { + if ($request->get('user_id') != $server->user_id && $this->can(self::CHANGEOWNER_PERMISSION)) { // find the user $user = User::findOrFail($request->get('user_id')); @@ -89,7 +100,10 @@ class ServerController extends Controller } // update the identifier - $server->identifier = $request->get('identifier'); + if($this->can(self::CHANGE_IDENTIFIER_PERMISSION)) { + + $server->identifier = $request->get('identifier'); + } $server->save(); return redirect()->route('admin.servers.index')->with('success', 'Server updated!'); @@ -103,6 +117,7 @@ class ServerController extends Controller */ public function destroy(Server $server) { + $this->checkPermission(self::DELETE_PERMISSION); try { $server->delete(); @@ -118,6 +133,8 @@ class ServerController extends Controller */ public function toggleSuspended(Server $server) { + $this->checkPermission(self::SUSPEND_PERMISSION); + try { $server->isSuspended() ? $server->unSuspend() : $server->suspend(); } catch (Exception $exception) { diff --git a/app/Http/Controllers/Admin/SettingsController.php b/app/Http/Controllers/Admin/SettingsController.php index 7e1c5457..3c6782f0 100644 --- a/app/Http/Controllers/Admin/SettingsController.php +++ b/app/Http/Controllers/Admin/SettingsController.php @@ -15,6 +15,9 @@ use Qirolab\Theme\Theme; class SettingsController extends Controller { + + const READ_PERMISSIONS = "admin.settings.read"; + const WRITE_PERMISSIONS = "admin.settings.write"; /** * Display a listing of the resource. * @@ -23,6 +26,8 @@ class SettingsController extends Controller public function index() { + $this->checkPermission(self::READ_PERMISSIONS); + // get all other settings in app/Settings directory // group items by file name like $categories $settings = collect(); @@ -91,6 +96,8 @@ class SettingsController extends Controller */ public function update(Request $request) { + $this->checkPermission(self::WRITE_PERMISSIONS); + $category = request()->get('category'); $settings_class = request()->get('settings_class'); diff --git a/app/Http/Controllers/Admin/ShopProductController.php b/app/Http/Controllers/Admin/ShopProductController.php index 690493f8..74c32639 100644 --- a/app/Http/Controllers/Admin/ShopProductController.php +++ b/app/Http/Controllers/Admin/ShopProductController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Admin; +use App\Http\Controllers\Controller; use App\Models\ShopProduct; use App\Settings\GeneralSettings; use App\Settings\LocaleSettings; @@ -11,12 +12,15 @@ use Illuminate\Contracts\View\View; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Http\Response; -use Illuminate\Routing\Controller; use Illuminate\Validation\Rule; class ShopProductController extends Controller { + const READ_PERMISSION = 'admin.store.read'; + const WRITE_PERMISSION = 'admin.store.write'; + const DISABLE_PERMISSION = 'admin.store.disable'; + /** * Display a listing of the resource. * @@ -24,6 +28,8 @@ class ShopProductController extends Controller */ public function index(LocaleSettings $locale_settings, GeneralSettings $general_settings) { + $this->checkPermission(self::READ_PERMISSION); + $isStoreEnabled = $general_settings->store_enabled; @@ -40,6 +46,8 @@ class ShopProductController extends Controller */ public function create(GeneralSettings $general_settings) { + $this->checkPermission(self::WRITE_PERMISSION); + return view('admin.store.create', [ 'currencyCodes' => config('currency_codes'), 'credits_display_name' => $general_settings->credits_display_name @@ -78,6 +86,8 @@ class ShopProductController extends Controller */ public function edit(ShopProduct $shopProduct, GeneralSettings $general_settings) { + $this->checkPermission(self::WRITE_PERMISSION); + return view('admin.store.edit', [ 'currencyCodes' => config('currency_codes'), 'shopProduct' => $shopProduct, @@ -117,6 +127,8 @@ class ShopProductController extends Controller */ public function disable(ShopProduct $shopProduct) { + $this->checkPermission(self::DISABLE_PERMISSION); + $shopProduct->update(['disabled' => !$shopProduct->disabled]); return redirect()->route('admin.store.index')->with('success', __('Product has been updated!')); @@ -130,6 +142,7 @@ class ShopProductController extends Controller */ public function destroy(ShopProduct $shopProduct) { + $this->checkPermission(self::WRITE_PERMISSION); $shopProduct->delete(); return redirect()->back()->with('success', __('Store item has been removed!')); diff --git a/app/Http/Controllers/Moderation/TicketCategoryController.php b/app/Http/Controllers/Admin/TicketCategoryController.php similarity index 81% rename from app/Http/Controllers/Moderation/TicketCategoryController.php rename to app/Http/Controllers/Admin/TicketCategoryController.php index 729e2f3c..74fff87a 100644 --- a/app/Http/Controllers/Moderation/TicketCategoryController.php +++ b/app/Http/Controllers/Admin/TicketCategoryController.php @@ -1,6 +1,6 @@ checkPermission(self::READ_PERMISSION); + $categories = TicketCategory::all(); - return view('moderator.ticket.category')->with("categories",$categories); + return view('admin.ticket.category')->with("categories",$categories); } /** @@ -28,6 +33,8 @@ class TicketCategoryController extends Controller */ public function store(Request $request) { + $this->checkPermission(self::WRITE_PERMISSION); + $request->validate([ 'name' => 'required|string|max:191', ]); @@ -35,7 +42,7 @@ class TicketCategoryController extends Controller TicketCategory::create($request->all()); - return redirect(route("moderator.ticket.category.index"))->with("success",__("Category created")); + return redirect(route("admin.ticket.category.index"))->with("success",__("Category created")); } /** @@ -46,6 +53,8 @@ class TicketCategoryController extends Controller */ public function update(Request $request) { + $this->checkPermission(self::WRITE_PERMISSION); + $request->validate([ 'category' => 'required|int', 'name' => 'required|string|max:191', @@ -68,6 +77,8 @@ class TicketCategoryController extends Controller */ public function destroy($id) { + $this->checkPermission(self::WRITE_PERMISSION); + $category = TicketCategory::where("id",$id)->firstOrFail(); if($category->id == 5 ){ //cannot delete "other" category @@ -84,7 +95,7 @@ class TicketCategoryController extends Controller $category->delete(); return redirect() - ->route('moderator.ticket.category.index') + ->route('admin.ticket.category.index') ->with('success', __('Category removed')); } @@ -101,7 +112,7 @@ class TicketCategoryController extends Controller }) ->addColumn('actions', function (TicketCategory $category) { return ' -
- -