CaiWuXiTong/app/Scopes/Company.php
15061959991 1adf627c0d feat: 财务系统二次开发 - 营销账户账单功能
- 基础环境:Docker 部署配置,源码挂载实时同步
- 修复:super_admin 权限补全、登录重定向循环
- 开发:店铺营销账户账单 - 抖音账户(15字段汇总账单)
- 开发:店铺营销账户账单 - 淘系支付宝账户(8字段流水账单)
- 开发:店铺营销账户账单 - 拼多多账户(7字段流水账单)
- 业务页面导航集成:config/business_navigation.php + Business\Pages 控制器
- 各平台独立表结构和视图,互不影响
2026-07-21 18:43:52 +08:00

52 lines
1.5 KiB
PHP

<?php
namespace App\Scopes;
use App\Traits\Scopes;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;
class Company implements Scope
{
use Scopes;
/**
* Apply the scope to a given Eloquent query builder.
*
* @param \Illuminate\Database\Eloquent\Builder $builder
* @param \Illuminate\Database\Eloquent\Model $model
* @return void
*/
public function apply(Builder $builder, Model $model)
{
if (method_exists($model, 'isNotTenantable') && $model->isNotTenantable()) {
return;
}
$table = $model->getTable();
// Skip for specific tables
// Note: 'notifications' is excluded because Laravel's notification system
// links to users (not companies). Queries against notifications should always
// be scoped to the authenticated user (e.g. auth()->user()->notifications)
// to avoid cross-company data exposure.
$skip_tables = [
'jobs', 'firewall_ips', 'firewall_logs', 'migrations', 'notifications', 'role_companies',
'role_permissions', 'sessions', 'user_companies', 'user_dashboards', 'user_permissions', 'user_roles',
];
if (in_array($table, $skip_tables)) {
return;
}
// Skip if already exists
if ($this->scopeColumnExists($builder, '', 'company_id')) {
return;
}
// Apply company scope
$builder->where($table . '.company_id', '=', company_id());
}
}