如何限制用户更改URL中的参数

时间:2017-08-25 09:24:39

标签: php laravel

我有一个管理部分,用户可以限制只搜索选定的国家/地区。因此,如果我选择用户只能搜索美国和法国,这些国家/地区的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 方法!

1 个答案:

答案 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'
    ));
}