MVC 컨트롤러에서 사용하는 사용자 지정 멤버 자격/역할 공급자가있어서 ASP.NET MVC에 액세스 할 수 있기 때문에 AuthorizationFilters 등을 사용할 수 있습니다. 많은 사람들이 사용자 정의 공급자를 구현 한 이래로 많은 사람들이이 작업을 수행했다고 상상하지만이 문제를 구체적으로 설명하지는 못했습니다. This post는 제 질문의 플립 측면입니다. 제 경우에는 컨트롤러와 잘 작동하는 커스텀 공급자가 있고, MVC도 그것을 사용하기를 원합니다.IoC 멤버 자격 공급자를 ASP.NET MVC와 통합하는 방법
내 공급자는 IoC/종속성 주입 디자인으로 구현됩니다. 공급자는 기본 멤버 자격/역할 API 이상의 추가 기능을 제공합니다. 내 컨트롤러에서는 Castle Windsor를 사용하여 인스턴스를 만듭니다. 이 모든 내 C# 코드에서 잘 작동
public class HomeController : Controller {
IMembershipService _membershipService;
public HomeController(IMembershipService membershipService) {
_membershipService= membershipService;
}
}
<castle>
<components>
<component id="MembershipService"
service="IMembershipService, MyApp"
type="MembershipService, MyApp" lifestyle="PerWebRequest">
<parameters>
<connectionString>#{defaultConnectionString}</connectionString>
</parameters>
</component>
</components>
</castle>
public class WindsorControllerFactory : DefaultControllerFactory {
private WindsorContainer _container;
public WindsorControllerFactory() {
_container = new WindsorContainer(new XmlInterpreter(new ConfigResource("castle")));
List<Type> controllerTypes = new List<Type>();
foreach (Type t in Assembly.GetExecutingAssembly().GetTypes()) {
if (typeof(IController).IsAssignableFrom(t))
controllerTypes.Add(t);
}
foreach (Type t in controllerTypes) {
// LifestyleType.Transient = new controller instance for each request
_container.AddComponentLifeStyle(t.FullName, t, LifestyleType.Transient);
}
}
protected override IController GetControllerInstance(Type controllerType) {
return (IController)_container.Resolve(controllerType);
}
하지만 난 그것으로 필터를 사용하여 [권한 부여]로 MVC에 내 업체를 연결하려면 : 코드는 비슷한에 보이는
[Authorize (Users="user1, user2", Roles="role8")]
public ViewResult MyResult(int x) {
// implement
}
나는 알고 ASP.NET에 사용자 지정 멤버 자격 또는 역할 공급자에 대해 알려주는 일반적인 방법은 아래의 web.config 파일에 있지만이 경우 ASP.NET은 작동하지 않는 기본 생성자를 호출하려고 시도합니다. 어떤 도움을 주셔서 감사합니다.
<membership>
<providers>
<clear/>
<add name="MyMembershipProvider" type="MyMembershipProvider">
</providers>
</membership>
감사합니다. 귀하의 첫 번째 방법은 잘 작동하지만 사용자 정의 IPrincipal/IIdentity 클래스를 작성하면 유연성이 향상됩니다. 예를 들어, Forms 인증이 제공하는 것과 다른 종류의 사용자/역할 인증을 작성하는 짧은 경로입니다. – keithm
webdotnet 프로젝트가 현재 저장소를 수은으로 옮기고있는 것 같습니다. 링크는 깨졌습니다 .--( –
webdotnet project up :-) –