2013-09-30 5 views
1

나는 customroleprovider.cs가 있습니다. 사용자와 역할이있는 사용자 테이블이 있습니다. 대부분의 사용자가 사용자로 역할을 가지고, 오직 3 관리자가, 지금은 3 읽기 전용 사용자를 생성해야합니다. 이 사용자는 전체 웹 사이트 만 볼 수 있으며 웹 사이트의 어떤 부분도 편집 할 수 없습니다. ,Readonly 역할 C# mvc

@{ 
     var simpleRoles = (RoleProvider)Roles.Provider; 
    } 
    @if (simpleRoles.IsUserInRole(User.Identity.Name, "admin")) 
    { 
} 

는 관리자에 대한 일부 지역을 제한하려면 내가 읽기 전용 사용자에 대해이 같은 일을해야합니까 : 내보기에 나는이 있나요?

답변

2

관리자와 사용자가 있으므로 "admin"영역과 "user"영역을 만들 수 있습니다. 아래에서 제안한 내용은 역할에서 숨기려는 몇 가지 견해가있는 경우에 한합니다. 관리 영역에서 관리자 만 컨텐트를 업데이트 할 수 있도록 해당 영역의 기본 컨트롤러에 권한 부여 특성을 추가 할 수 있습니다. 그렇지 않으면, 다른 역할에서 업데이트 단추를 숨기고보기가 엉망이 될 수 있으므로보기에 if 문을 사용해야합니다.

UPDATE : 아래

는 지역의 개요에 대한 링크입니다. 영역은 "Admin"이라는 영역을 만들 수 있고 그 영역 안에 컨트롤러/뷰/뷰 모델 등이있을 수 있기 때문에 영역이 멋집니다. 다른 영역과는 별개입니다. 이 영역에는 컨텐츠 업데이트 로직을 포함 할 수 있지만, 컨텐츠를 업데이트하는 역할을 원하지 않으면 로직을 포함시키지 마십시오. 다행히 링크가 할 수있는 것보다 더 잘 설명해 줄 것입니다.

프로젝트 영역을 사용할 때 모든 컨트롤러가 상속하는 기본 컨트롤러를 만듭니다. 내 기본 컨트롤러처럼 보일 수 있습니다 무엇의 예는 다음과 같습니다에만 관리자가 웹 사이트의이 부분에 액세스 할 수 있도록

[Authorize(Roles="Admin")] 
public class AdminBaseController : Controller 
{ 
    ... 
} 

그런 다음 지역 내 모든 컨트롤러에서 나는 AdminBaseController에서 상속됩니다. 당신은 단지 당신이 컨트롤러 액션에 이런 일을 할 수있는 view.cshtml 파일을 볼 관리자의 원하는 경우, 예를 들어

:

http://www.dotnet-tricks.com/Tutorial/mvc/a9P1010113-MVC-Areas-with-example.html

권한 부여 뷰에 속성을 추가

public class HomeController : AdminBaseController 
{ 
    ... 
} 
: 사용자가 그 역할을하지 않은 경우

[Authorize(Roles="admin")] 
public ActionResult View() 
{ 
    .... 
} 

그들은이보기에 액세스 할 수있을 것입니다.

여러 역할을 위해, 당신은 할 수 있습니다 :

[Authorize(Roles="admin, user")] 
public ActionResult View() 
{ 
    ... 
} 

이 페이지를 볼 수있는 관리자 또는 사용자 인 사람을 수 있습니다. (두 가지 역할을 모두 수행 할 필요는 없습니다.)

+0

여러 역할을 추가 할 수 있습니까? 관리자 및 사용자? – NULL

+0

예 [Authorize (Roles = "admin, user")] 여야합니다. 사실, 올바른 방법을 다시 확인하는 구문을 살펴 보겠습니다. – Andrew

+0

내 대답 – Andrew

1

위의 제 의견에 정교합니다. 권한 부여 속성을 사용하여 컨트롤러 작업을 장식하면 해당 역할이 특정 역할로 잠길 수 있습니다. 이것은 읽기 전용 유형 역할의 문제점을 해결하지 못합니다. 역할을 평가 한 다음 다른보기를 리턴하기 위해 제어기 조치에서 일부 논리가 필요합니다. 이것을 BaseController에 배치하는 것이 좋습니다. 다른 컨트롤러에 상속하십시오 :

public abstract class BaseController : Controller 
{ 

    public bool IsReadOnly { get; set; } 

    public BaseController() 
    { 
     this.IsReadOnly = Roles.IsUserInRole("readonly"); 
    } 
} 

public class HomeController : BaseController 
{ 
    [Authorize(Roles = "admin, user, readonly")] 
    public ActionResult Edit(int id) 
    { 
     if (!IsReadOnly) 
     { 
      return View("Details"); 
     } 
     ... other stuff 
    } 
} 
+0

authorizeadmin 컨트롤러가 있으므로 여기에 추가 할 것입니다. – NULL

0

시도해보십시오.cshtml

@if (User.Identity.IsAuthenticated){ if (User.IsInRole("Admin")){ @Html.ActionLink("Admin", "AdminController")
} }