2016-02-05 112 views
0

在這裏,我想解釋清楚我的問題,我怎樣才能限制Yii2如何限制Yii2網址查看GET請求

通過URL get請求,這是我的網址:

http://localhost/school/backend/web/index.php?r=user%2Fview&id=42

這裏如果我更改了view id = 43,它顯示的數據是id43,我不想通過url獲取數據。我想通過URL or限制GET請求,我怎麼可以加密id

如果我改變我的網址經理

'urlManager' => [ 
    'enablePrettyUrl' => true, 
    'showScriptName' => false, 
], 

然後我收到網址,如下所示

http://localhost/school/admin/user/view?id=42

這裏也如果我改變id=43上午得到的數據id43

我該怎麼做。幫助將非常感激。

+0

只是爲了澄清:你的例子中的id是什麼?當前用戶的ID?或當前用戶有權訪問的另一個ID?如果是另一個,你怎麼知道哪個用戶可以訪問誰?這些信息是如何保存的?你能用這些信息更新你的問題嗎? – Clyff

+0

用戶的唯一ID @Clyff – Nodemon

+0

其實我有登錄經理(user_type是經理)。此登錄用於單獨添加員工,而不用查看其他公司員工詳細信息。但他們改變了URL中的id,並且他們獲取了數據。我怎麼能限制@Clyff – Nodemon

回答

0

假設當前情況下(讓我知道如果我誤解的東西):

Company可以看到/添加/編輯People(你已經做到了一部分)。現在,每個Company只能在您自己的People上執行操作,而不是其他操作。

一個解決辦法:

在你Company模型,你必須有這樣的:

public function getPeoplesIds() 
{ 
    return ArrayHelper::map($this->peoples, 'id', 'id'); 
} 

public function getPeoples() 
{ 
    return $this->hasMany(People::className(), ['id_people' => 'id']); 
} 

您可以添加其他功能,只是返回的People IDS

現在在你的控制器中,你必須重寫你的beforeAction函數:

public function beforeAction($action){ 
    $id = Yii::$app->request->get('id'); 

    if($id && !Yii::$app->user->isGuest) { 
     $user = User::findOne(Yii::$app->user->getId()); 
     $company = //Do the logic to get the company's user 

     if (! in_array($id, $company->peoplesIds) { 
      throw new NotFoundHttpException('The requested page does not exist.'); 
     } 
    } 

    return parent::beforeAction($action); 
} 

這樣,您在運行每個操作之前檢查$id

+0

中輕鬆地(不是很容易地)使用授權鏈接來學習如何在yii2文檔中授權用戶。我需要在$ company =「」中寫入,我沒有得到你想說的內容 – Nodemon

+0

在哪個控制器中,我需要寫此控制器代碼,**人員或用戶或公司** – Nodemon

+0

具有您想要限制的操作的控制器。在我的例子中是「人」。關於你的問題......以及我認爲在做任何事情之前,每個人都需要登錄?所以你有當前的用戶。現在,您需要複製您用於將'Users'關聯到的邏輯,在我的示例中爲'Company'。如果我的示例與您目前的內容太不相同,請更新您的問題並提供更多信息。 – Clyff

0

首先你應該考慮你的目的。 爲什麼你想阻止用戶獲得另一個ID? 如果他們無權看其他ID,您就可以輕鬆地批准他們的請求:Yii2-authorization

否則,您可以使用您的表中的字符串鍵,生成隨機字符串使用Yii內置類鍵。 Yii2-security

+0

其實我有登錄經理(user_type是經理)。此登錄用於單獨添加員工,而不用查看其他公司員工詳細信息。但他們改變了URL中的id,並且他們獲取了數據。當用戶登錄時,我怎麼能限制這個 – Nodemon

+0

,他或她是通過身份驗證來訪問資源的,但是在認證之後,我們假設要檢查哪個認證用戶能夠訪問哪個資源,現在我們面對另一個定義授權。你可以在我的答案 – masoud