2009-03-26 3 views
2

죄송합니다. 바보 같은 질문을하는 것이 발견되면 죄송합니다. 하지만 asp.net에 익숙하지 않아 문제가 발생했습니다.ASP.NET MVC보기 - 승인 된 항목 표시

asp.mvc를 배우기위한 간단한 블로그를 작성하고 있습니다. 사용자 옆에있는 편집 링크를 표시하고 싶습니다. 현재 currentUser 개체를 Model에 추가하고 IsLogged 속성을 확인하여 Edit 링크를 표시할지 여부를 결정해야합니다. 문제는 로그인 한 사용자가 없으면 모델을 삽입하여 가짜 currentUser를 만들어 다른 모델에서 작동하게해야한다는 것입니다. 무엇을 요구하는 것은 이것을하기위한 다른 우아한 방법이 있다는 것입니다. 예를 들어 Controller에서 [Authorize] 속성을 사용하여 Action에 대한 액세스를 허용 할 수 있습니다. 보기에 적용 할 비슷한 방법이 있습니까?

답변

3

,이 건물은 이미 요청 객체에 존재 :보기에

을 Request.IsAuthenticated

, 당신은 당신이 같은 문제 일을 뭔가를 해결할 수 :

<% if(this.Request.IsAuthenticated) 
    { 
%> 
    <%= Html.ActionLink("Edit", url - to - action) %> 
<% } 
%> 

하지만 현재 문제는 현재 사용자가 현재 블로그를 수정할 수 있는지 확인하는 것입니다. 그런 일처럼 보일 것

<% if(this.CanEdit(this.User)) 
    { 
%> 
    <%= Html.ActionLink("Edit", url - to - action) %> 
<% } 
%> 

확장을 : :이 경우 , 당신은 ViewPage 개체의 확장 방법을 CanEdit을 할 수 있습니다 빠른 답변을

public static class ViewExtensions 
{ 
    public static bool CanEdit(ViewPage view, MyUser user) 
    { 
     bool retour = false; 

     if(principal != null) 
     { 
      // get your blog from the view 
      Blog blog = view.ViewData["myBlog"]; 
      // check if the principal is the owner 
      retour = (blog.Owner.Id == user.Id); 
     } 
     return retour; 
    } 
} 
+0

교장이 어디에서 왔는지 설명 할 수 있습니까? if (principal! = null) –

+0

-principal + user – Mose

0

IsLoggedIn모델의 부울 속성으로 지정하십시오. 이렇게하면 IsLoggedInfalse 일 때 CurrentUsernull과 같게 할 수 있습니다. 보기에서 IsLoggedIn을 확인하고 false 인 경우 CurrentUser에서 아무 것도 호출하지 않습니다. 이 방법은 NullReferenceException을 우회합니다.

IsLoggedIn 속성을 모두 버리고 사용자가 CurrentUser != null을 사용하여 직접 로그인했는지 확인할 수도 있습니다. 당신은 폼 인증을 사용하는 경우

+0

감사하지만, CurrentUser를 모델에 넣을 필요가없는 솔루션이 있습니다. 우리는 로그인 사용자를 확인하고 무언가를 표시해야하는 View가 많다고 말하고 모든보기에서 CurrentUser를 반환하는 것은 매우 정돈 된 작업입니다. –

+0

그렇게하면 MVC 모델을 깨뜨릴 수 있습니다. 보기는 렌더링을 위해 Model 객체를 제외하고는 아무것도 사용하지 않아야합니다. –

+0

뷰에서 직접 현재 데이터를 가져 오면 안됩니다. 그것은 컨트롤러에서 수행되어야합니다. 그러나 컨트롤러의 요청을 가로 채기 위해 ActionFilter를 작성하고 CurrentUser를'ViewData'에 저장하여 앞으로보기에서 액세스 할 수 있습니다. –

관련 문제