我想实现的目标是,我在几个国家/地区拥有受众。我在不同的国家也有编辑。
例如,美国的编辑只能编辑和查看US中的帖子,而Hong Kong的编辑则不允许查看美国的帖子。
Route::get('{country}/posts', [
'uses' => 'CountryController@posts',
'middleware' => ['permission:view posts,{country}'], <------- SEE HERE
]);
有可能实现这一目标吗?
P / S:我正在使用Spatie laravel-permission
答案 0 :(得分: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()
答案 1 :(得分:0)
这是不可能的,但是我在中间件中使用以下代码行:
$country = $request->route('country'); // gets 'us' or 'hk'
此Request
方法返回路由段。