1

我想要实现的是,我在几个国家有观众。我也有不同国家的编辑。

例如,美国的编辑只能编辑和查看美国的帖子,香港的编辑不允许查看美国的帖子。

Route::get('{country}/posts', [
    'uses' => 'CountryController@posts',
    'middleware' => ['permission:view posts,{country}'], <------- SEE HERE
]);

有可能实现这一目标吗?

P/S:我正在使用Spatie laravel-permission

4

2 回答 2

1

创建另一个中间件更容易,如下所示:

namespace App\Http\Middleware;

use Closure;

class CountryCheck
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // The method `getEnabledCountries` returns an array 
        // with the countries enabled for the user
        if(in_array($request->route('country'), Auth::user()->getEnabledCountries())) {
           return $next($request);
        }

        // abort or return what you prefer

    }
}

无论如何...country如果用户只能看到来自他的国家/地区的帖子,则该参数在我的建议中是无用的...如果您已经知道用户区域设置并且您已经拥有此规则...为什么您必须再次检查?

在我看来,最好创建一个类似的路由,Route::get('posts')并在控制器内部加载与用户国家相关的帖子......比如:

Post::where('locale', '=', Auth::user()->locale())->get()

或范围:

Post::whereLocale(Auth::user()->locale())->get()

于 2018-08-16T10:44:06.733 回答
0

这是不可能的,但我在中间件中使用了这行代码:

$country = $request->route('country'); // gets 'us' or 'hk'

此方法Request返回路由段。

于 2018-08-16T10:28:47.140 回答