2012-01-25 49 views
0

我正在內容管理系統上工作,其中有一個控制器顯示分配給當前登錄用戶的所有文章以供他審閱,然後用戶可以批准或拒絕這篇文章。爲了確保用戶只能看到分配給他的文章中,我寫了下面的查詢: -對控制器操作方法執行自定義授權檢查

public IQueryable<Article> MyApproval() 
{ 
    Guid id = (Guid)Membership.GetUser().ProviderUserKey; 
    return from article in db.Articles 
      where article.Approval_ID == id && article.Article_status_ID == 1 // 1 represents new articles in Article_status table 
      orderby article.Article_ID descending 
      select article; 
} 

但是我發現,用戶可以手動修改URL和更改文章編號,以他的一篇文章沒有分配給他,然後他可以批准或拒絕它;所以我編輯的操作方法

[Authorize] 
public ActionResult Edit(int id) 
{ 
    Article articleapproval = articletyperepository.GetArticle(id); 

    if (!articleapproval.Isapproval(User.Identity.Name)) 
     return View(「InvalidOwner」); 
    else 
    { 
     articleapproval.Published_Date = DateTime.Now; 
     return View(articleapproval);} 
    } 
} 

所以之前添加下面的檢查,我有以下三個問題: -

  1. 將在控制器級別的檢查防止用戶修改URL和訪問一篇文章,他不是分配的

  2. 我是否也應該在POST版本的編輯操作方法(除了GET版本)上添加下面的檢查,否則將被視爲不必要的檢查?

    if (!articleapproval.Isapproval(User.Identity.Name)) 
        return View(「InvalidOwner」); 
    
  3. 什麼是更好的傳遞給User.Identity.Name輔助方法(因爲我目前正在做)?或者修改輔助方法以在其中生成User.Identity.Name,如下所示?

    public partial class Article 
    {  
        public bool Isapprova() 
        { 
         return HostedBy.Equals(User.Identity.Name, StringComparison.OrdinalIgnoreCase);} 
        } 
    } 
    

回答

1

將在控制器級別的檢查防止用戶修改 的URL和訪問的文章,他不是分配

我應該在POST版本的編輯動作 方法als上添加下面的檢查o(除了GET版本),否則將被視爲 作爲不必要的檢查?

你應該檢查GET和POST

什麼是更好的傳遞給User.Identity.Name輔助方法(如 我目前在做)?或者修改幫助器方法以在其內部生成 User.Identity.Name,如下所示?

幫助器方法不需要知道如何檢索當前用戶的名稱。你的實現很好。

相關問題