Files

158 lines
4.0 KiB
PHP

<?php
namespace FluentForm\App\Http\Policies;
use FluentForm\App\Modules\Acl\Acl;
use FluentForm\App\Services\Manager\FormManagerService;
use FluentForm\Framework\Http\Request\Request;
use FluentForm\Framework\Foundation\Policy;
use FluentForm\Framework\Support\Arr;
class ReportPolicy extends Policy
{
private function canAccessReportData(Request $request)
{
$formId = $this->resolveFormId($request);
if ($formId) {
return Acl::hasPermission('fluentform_entries_viewer', $formId);
}
return Acl::hasPermission('fluentform_entries_viewer');
}
private function canAccessDashboardReport(Request $request)
{
if (!Acl::hasPermission('fluentform_dashboard_access')) {
return false;
}
return $this->canAccessReportData($request);
}
private function canAccessRequestedForm(Request $request)
{
return $this->canAccessReportData($request);
}
private function canAccessOptionalFormScopedReport(Request $request)
{
if (!Acl::hasPermission('fluentform_dashboard_access')) {
return false;
}
$formId = $this->resolveFormId($request);
if ($formId) {
return Acl::hasPermission('fluentform_entries_viewer', $formId);
}
if (!Acl::hasPermission('fluentform_entries_viewer')) {
return false;
}
$userId = get_current_user_id();
return !$userId || !FormManagerService::hasSpecificFormsPermission($userId);
}
/**
* Check permission for any method
*
* @param \FluentForm\Framework\Request\Request $request
* @return bool
*/
public function verifyRequest(Request $request)
{
return Acl::hasPermission('fluentform_dashboard_access');
}
public function form(Request $request)
{
return $this->canAccessRequestedForm($request);
}
public function submissions(Request $request)
{
return $this->canAccessRequestedForm($request);
}
public function getOverviewChart(Request $request)
{
return $this->canAccessRequestedForm($request);
}
public function getRevenueChart(Request $request)
{
return $this->canAccessRequestedForm($request);
}
public function getFormStats(Request $request)
{
return $this->canAccessRequestedForm($request);
}
public function getApiLogs(Request $request)
{
return $this->canAccessRequestedForm($request);
}
public function getPaymentTypes(Request $request)
{
return $this->canAccessRequestedForm($request);
}
public function getCompletionRate(Request $request)
{
return $this->canAccessOptionalFormScopedReport($request);
}
public function getHeatmapData(Request $request)
{
return $this->canAccessOptionalFormScopedReport($request);
}
public function getCountryHeatmap(Request $request)
{
return $this->canAccessOptionalFormScopedReport($request);
}
public function getTopPerformingForms(Request $request)
{
return $this->canAccessDashboardReport($request);
}
public function getSubscriptions(Request $request)
{
return $this->canAccessOptionalFormScopedReport($request);
}
public function getFormsDropdown(Request $request)
{
return $this->canAccessDashboardReport($request);
}
public function netRevenue(Request $request)
{
return $this->canAccessOptionalFormScopedReport($request);
}
public function submissionsAnalysis(Request $request)
{
return $this->canAccessOptionalFormScopedReport($request);
}
private function resolveFormId(Request $request)
{
$route = $request->route();
$routeFormId = $route ? Arr::get($route->getParameter(), 'form_id') : null;
$routeFormId = Acl::normalizeFormId($routeFormId);
if ($routeFormId) {
return $routeFormId;
}
return Acl::normalizeFormId($request->get('form_id'));
}
}