can(__("permissions.administrator"))) { return true; } else { return false; } } static function currentUserId() { if(AccessHelper::isAuthenticated()) { return Auth::user()->id; } else { return 0; } } static function hasPermissionRoles($permissions = array()) { if(array_key_exists('permissions', $permissions)) { if(AccessHelper::isAdmin() || \Auth::user()->hasAnyRole($permissions['permissions'])) { return true; } } else { return true; } } static function hasAdminPermission($name) { $name = ucfirst($name); if(!AccessHelper::isAuthenticated()) { return false; } if(AccessHelper::isAdmin() || \Auth::user()->hasRole(__("permissions.:model administrator", ['model' => $name]))) { return true; } else { return false; } } static function hasModeratorPermission($name) { $name = ucfirst($name); if(!AccessHelper::isAuthenticated()) { return false; } if(AccessHelper::isAdmin() || \Auth::user()->hasRole(__("permissions.:model moderator", ['model' => $name]))) { return true; } else { return false; } } static function hasAnyPermission($name) { $name = ucfirst($name); if(!AccessHelper::isAuthenticated()) { return false; } if(AccessHelper::isAdmin() || \Auth::user()->can(__("permissions.:model create", ['model' => $name])) || \Auth::user()->can(__("permissions.:model edit (all)", ['model' => $name])) || \Auth::user()->can(__("permissions.:model edit (own)", ['model' => $name])) || \Auth::user()->can(__("permissions.:model delete (all)", ['model' => $name])) || \Auth::user()->can(__("permissions.:model delete (own)", ['model' => $name])) || (strpos($name, 'Dashboard') !== false)) { return true; } else { return false; } } static function hasAnyModelPermission($model) { $name = ucfirst($model->type); if(!AccessHelper::isAuthenticated()) { return false; } if(AccessHelper::isAdmin() || ((\Auth::user()->can(__("permissions.:model create", ['model' => $name])) || \Auth::user()->can(__("permissions.:model edit (all)", ['model' => $name])) || \Auth::user()->can(__("permissions.:model edit (own)", ['model' => $name])) || \Auth::user()->can(__("permissions.:model delete (all)", ['model' => $name])) || \Auth::user()->can(__("permissions.:model delete (own)", ['model' => $name])) || (strpos($name, 'Dashboard') !== false)) && AccessHelper::userHasDepartment($model) && AccessHelper::userHasInstance($model))) { return true; } else { return false; } } static function hasCreatePermission($name) { $name = ucfirst($name); if(!AccessHelper::isAuthenticated()) { return false; } if(AccessHelper::isAdmin() || \Auth::user()->can(__("permissions.:model create", ['model' => $name]))) { return true; } else { return false; } } static function hasAnyEditPermission($name, $user_id = -1) { $name = ucfirst($name); if(!AccessHelper::isAuthenticated()) { return false; } if($user_id == -1) { $user_id = Auth::user()->id; } if(AccessHelper::isAdmin() || AccessHelper::hasEditOwnPermission($name, $user_id) || AccessHelper::hasEditAllPermission($name)) { return true; } else { return false; } } static function hasEditOwnPermission($name, $user_id = -1) { $name = ucfirst($name); if(!AccessHelper::isAuthenticated()) { return false; } if($user_id == -1) { $user_id = Auth::user()->id; } if(\Auth::user()->can(__("permissions.:model edit (own)", ['model' => $name])) && (Auth::user()->id == $user_id)) { return true; } else { return false; } } static function hasEditAllPermission($name) { $name = ucfirst($name); if(!AccessHelper::isAuthenticated()) { return false; } if(AccessHelper::isAdmin() || \Auth::user()->can(__("permissions.:model edit (all)", ['model' => $name]))) { return true; } else { return false; } } static function hasEditModelPermission($model) { $name = ucfirst($model->type); if(!AccessHelper::isAuthenticated()) { return false; } if(AccessHelper::isAdmin() || (\Auth::user()->can(__("permissions.:model edit (all)", ['model' => $name])) && AccessHelper::userHasDepartment($model) && AccessHelper::userHasInstance($model))) { return true; } else { return false; } } static function hasAnyDeletePermission($name, $user_id = -1) { $name = ucfirst($name); if(!AccessHelper::isAuthenticated()) { return false; } if($user_id == -1) { $user_id = Auth::user()->id; } if(AccessHelper::isAdmin() || AccessHelper::hasDeleteOwnPermission($name, $user_id) || AccessHelper::hasDeleteAllPermission($name)) { return true; } else { return false; } } static function hasDeleteOwnPermission($name, $user_id = -1) { $name = ucfirst($name); if(!AccessHelper::isAuthenticated()) { return false; } if($user_id == -1) { $user_id = Auth::user()->id; } if(\Auth::user()->can(__("permissions.:model delete (own)", ['model' => $name])) && (Auth::user()->id == $user_id)) { return true; } else { return false; } } static function hasDeleteAllPermission($name) { $name = ucfirst($name); if(!AccessHelper::isAuthenticated()) { return false; } if(AccessHelper::isAdmin() ||\Auth::user()->can(__("permissions.:model delete (all)", ['model' => $name]))) { return true; } else { return false; } } static function hasDeleteModelPermission($model) { $name = ucfirst($model->type); if(!AccessHelper::isAuthenticated()) { return false; } if(AccessHelper::isAdmin() || (\Auth::user()->can(__("permissions.:model delete (all)", ['model' => $name])) && AccessHelper::userHasDepartment($model) && AccessHelper::userHasInstance($model))) { return true; } else { return false; } } static function countPermissions($names) { $count = 0; if(!AccessHelper::isAuthenticated()) { return false; } if(!is_array($names)) { $names = array($names); } foreach($names as $name) { $name = ucfirst($name); if(AccessHelper::isAdmin()) { $count++; } if(\Auth::user()->can(__("permissions.:model create", ['model' => $name]))) { $count++; } if(\Auth::user()->can(__("permissions.:model edit (all)", ['model' => $name]))) { $count++; } if(Auth::user()->can(__("permissions.:model edit (own)", ['model' => $name]))) { $count++; } if(Auth::user()->can(__("permissions.:model delete (all)", ['model' => $name]))) { $count++; } if(\Auth::user()->can(__("permissions.:model delete (own)", ['model' => $name]))) { $count++; } } return $count; } static function userHasDepartment($model) { $hasDepartment = false; // Hole die Abteilungen des Benutzers $userDepartments = array(); \Auth::user()->departments->each(function ($department) use (&$userDepartments) { $userDepartments[] = $department->name; }); if(method_exists($model, 'tag')) { // Vergleiche die Abteilungen des Benutzers mit der Abteilung des Posts $model->tag('abteilung')->each(function ($department) use ($userDepartments, &$hasDepartment) { if(in_array($department->name, $userDepartments)) { $hasDepartment = true; return; } }); } return $hasDepartment; } static function userHasInstance($model) { $hasInstance = false; // Hole die Instanzen des Benutzers $userInstances = array(); \Auth::user()->instances->each(function($instance) use (&$userInstances){ $userInstances[] = $instance->name; }); if(method_exists($model, 'tag')) { // Vergleiche die Instanzen des Benutzers mit der Instanz des Posts $model->tag('instanz')->each(function ($instance) use ($userInstances, &$hasInstance) { if(in_array($instance->name, $userInstances)) { $hasInstance = true; return; } }); // Wenn keine Instanz verlinkt ist, gilt die Berechtigung trotzdem als erteilt if($model->tag('instanz')->count() == 0) { return true; } } return $hasInstance; } }