我有一个管理部分,用户可以限制只搜索选定的国家/地区。因此,如果我选择用户只能搜索美国和法国,这些国家/地区的ID将作为字符串存储在表中。所以这将是1,2
;
但是我们可以说用户只能在美国搜索,因此ID为1。
当用户开始搜索时,我得到这个值并将其存储在变量中:
$searchableCountry = explode(",", Input::get('searchableCountry'));
这是搜索条件:
if ($searchableCountry != null) {
$results = $cl->Filter('country', $searchableCountry);
}
我得到的URL是这样的: http://myapp.com/search?q=Adidas&searchableCountry=1
但是,用户可以修改网址并更改searchableCountry
值并搜索其他国家/地区。我怎么能避免这个?可以用Session完成吗?如果是,请举个例子?
btw for search我使用这个包https://github.com/sngrl/sphinxsearch
PS我必须使用 GET 方法!
答案 0 :(得分:0)
如果你想限制你的用户只能做某事,你不应该让他们选择他们想要的东西,你必须修改你的规则。
$results = $cl->Filter('country', $config['country']['us']);
如果您想授予他们在更多国家/地区搜索的权限,具体取决于他们的级别,您必须添加更多权限设置,例如用户级别,因此如果他们访问http://myapp.com/search?q=Adidas&searchableCountry=3您可以返回错误,因为他们有不许可。
例如我的想法,尚未测试但应该有用。
<?php
//your user data
$user = json_decode('{
"user_id" : NumberLong(1004109307),
"fullname" : "Johnny",
"email" : "xxx@gmail.com",
"phone" : "123456789",
"role" : "basic", //wich user can search US,FRANCE for country id is [1,2]
"create_time" : NumberLong(1503537866)
}', true); //retun an array
//Your country id config somewhere
$country_list = array(
'US' => 1,
'FR' => 2,
'JP' => 3,
'CN' => 4,
);
//Your config somewhere
$searchable_country_config = array(
'basic' => array(
$country_list['US'], //1
$country_list['FR'], //2
),
'premium' => array(
$country_list['JP'],
$country_list['CN'],
),
);
$searchable_request = (Input::get('searchableCountry')) ? Input::get('searchableCountry') : 1; // 2 for example
$searchable_permission = $searchable_country_config[$user['role']];
//lets check that does this user have permission on their request
if(in_array($searchable_request,$searchable_permission))
{
$results = $cl->Filter('country', $searchable_request);
} else {
return response()->json(array(
'status' => 'error',
'message' => 'You have not access for this country'
));
}