2010-11-30 5 views
1

현재 C# MVC로 작성된 시스템을 수정하고 있습니다.역할에서 역할이 작동하지 않습니다. MVC C#

저는 관리자가 제한된 관리자 기능을 가진 사용자 계정을 만들 수있는 관리자 영역에 추가 기능을 추가했습니다. 나는 새로운 기능에 대한 각각의 컨트롤러를 통해 다음과 같은 넣어했습니다

[Authorize(Roles = "Administrator")] 

그러나, 나는 제한된 관리자 계정을 사용하여 로그인하고 해당 페이지로 이동하면, 그것은 나를 통해 할 수 있습니다.

내가 올바른 방향으로하고있는 것처럼 보이기 때문에 나는 혼란 스럽지만, MVC에도 상당히 익숙하다. 내가 확인할 수있는 다른 것이 있는가? web.config 파일에서 아무 것도 변경하지 않아도됩니다.

위의 정보가 이미 부족하다는 것을 알고 기성품 해결책을 찾지 못했지만 문제를 해결하기 위해 무엇을 검사 할 수 있는지 자세히 알아 봅니다.

감사

편집 :

이 새 역할/계정이 생성 된 방법이다. 너무 쉽게 가십시오, 이것은 첫번째 도랑 시도이고, 많은 검증이 없습니다.

[Authorize(Roles = "Administrator")] 
    [HttpPost] 
    public ActionResult AddSalesManager(App.Web.Areas.Administrator.Models.SalesManager model, FormCollection formValues) 
    { 
     if (formValues["Cancel"] != null) 
     { 
      return RedirectToAction("Index"); 
     } 

     if (!string.Equals(model.password, model.confirmpassword)) 
     { 
      ModelState.AddModelError("password", "Password and Confirmation must match"); 
     } 

     if (ModelState.IsValid) 
     { 
      using (ModelContainer ctn = new ModelContainer()) 
      { 
       // First, create the user account inside the ASP.Net membership system. 
       // 

       Membership.ApplicationName = "App"; 
       Roles.ApplicationName = "App"; 

       if (!Roles.RoleExists("LimitedAdmin")) 
        Roles.CreateRole("LimitedAdmin"); 

       // MembershipCreateStatus createStatus = MembershipService.CreateUser(model.email, model.password, model.email); 
       if (Membership.GetUser(model.email) == null) 
       { 
        Membership.CreateUser(model.email, model.password); 
        Roles.AddUserToRole(model.email, "LimitedAdmin"); 
       } 

      } 
     } 
     return RedirectToAction("Index"); 

    } 
+1

이 역할이 도움이 설정하는 방법 게시. – jfar

+0

2 초가 걸립니다. – 109221793

+0

사용자에게 여러 역할이 있습니까? – jfar

답변

2

이 코드에서 당신은 무엇을 기대합니까?

이 속성을 사용하면 관리자 역할의 모든 사용자가 계정의 제한없이이 컨트롤러 작업을 실행할 수있는 권한을 얻을 수 있습니다.

+0

예,하지만이 시스템/계정 영역에 허용되지 않는 것으로 예상되는 LimitedAdmin이라는 새 역할을 만들었지 만이 계정/역할을 사용하는 데 나를 허용합니다. – 109221793

+0

두 역할의 사용자가 모두 포함되어 있습니까? 아니면 LimitedAdmin 역할에만 있습니까? – Mariusz

+0

제한된 관리자 계정을 만든 방법을 보여주기 위해 코드를 업데이트했습니다. – 109221793

3

역할 속성

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)] 
public class PermissionsAttribute : ActionFilterAttribute 
{ 
    private readonly PermissionsType required; 

    public PermissionsAttribute() 
    { 
    } 

    public PermissionsAttribute(PermissionsType required) 
    { 
     this.required = required; 
    } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // Log("OnActionExecuting", filterContext.RouteData); 

     HttpSessionStateBase session = filterContext.HttpContext.Session; 
     Controller controller = filterContext.Controller as Controller; 

     //This is uesd to redirect to same controller but differnect action 
     // controller.HttpContext.Response.Redirect("./Login"); 

     var rjasthan = filterContext; 


     var URK = filterContext.HttpContext.Request.RawUrl; 
     if (session["UserPermissions"] != null) 
     { 
      if (!CheckPermissions((UserPermission)session["UserPermissions"])) 
      { 
       // this is used to signout from sesssion 
       // filterContext.HttpContext.GetOwinContext().Authentication.SignOut(); 

       filterContext.Controller.TempData["AuthenticationMessages"] = "You are not authorized to access"; 

       filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary{ 
          { "controller", "Home" },{ "action", "UnAuthorizeAccess" }}); 

      } 
     } 

     base.OnActionExecuting(filterContext); 

    } 

    protected bool CheckPermissions(UserPermission model) 
    { 
     bool result = false; 

     if (this.required == (PermissionsType.Add)) 
     { 
      if (model.AddRight) 
       result = true; 
     } 
     else if (this.required == (PermissionsType.View)) 
     { 
      if (model.ViewRight) 
       result = true; 
     } 
     else if (this.required == (PermissionsType.Edit)) 
     { 
      if (model.EditRight) 
       result = true; 
     } 
     else if (this.required == (PermissionsType.Delete)) 
     { 
      if (model.DeleteRight) 
       result = true; 
     } 
     else if (this.required == (PermissionsType.View | PermissionsType.Edit)) 
     { 
      if (model.ViewRight && model.EditRight) 
      { 
       result = true; 
      } 
     } 
     else if (this.required == (PermissionsType.Add | PermissionsType.Edit)) 
     { 
      if (model.AddRight && model.EditRight) 
      { 
       result = true; 
      } 
     } 


     return result; 
    } 

    private void Log(string methodName, RouteData routeData) 
    { 
     var controllerName = routeData.Values["controller"]; 
     var actionName = routeData.Values["action"]; 
     var message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName); 
     Debug.WriteLine(message, "Action Filter Log"); 
    } 
} 

[Flags] 
public enum PermissionsType 
{ 
    View = (1 << 0), 
    Add = (1 << 1), 
    Edit = (1 << 2), 
    Delete = (1 << 3), 
    Admin = (View | Add | Edit | Delete) 
} 



[Permissions(PermissionsType.Add)] 
    public ActionResult Register() 
    { 
     return this.AjaxableView(); 
    } 
관련 문제