En iyi yanıtlayıcılar
Asp.Net Mvc Rol Sorunu

Soru
-
Merhaba,
Oluşturduğum projede giriş yaparak admin ise admin butonu görünür hale gelicek onun için şöyle bi kod yazdım
@if (Request.IsAuthenticated && User.IsInRole(Constants.AdminRoleName)) { <li><a href="@Url.Action("Index", "Admin", new { area="Admin" })">Admin</a></li> }
Ama burada User.IsInRole false geliyor. Veritabanımda User, Role ve UserRoles tablosunda kullanıcı tanımlarım mevcut. Web.config dosyasıda şu şekilde.:
<profile defaultProvider="DefaultProfileProvider"> <providers> <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="ProjeConnection" applicationName="/" /> </providers> </profile> <membership defaultProvider="DefaultMembershipProvider"> <providers> <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="ProjeConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" /> </providers> </membership> <roleManager defaultProvider="DefaultRoleProvider"> <providers> <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="ProjeConnection" applicationName="/" /> </providers> </roleManager> <sessionState mode="InProc" customProvider="DefaultSessionProvider"> <providers> <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="ProjeConnection" /> </providers> </sessionState>
Default rol sağlayıcıyı kullanmak istiyorum ama tahminimce benim Role ve UserRoles tablolarımı görmüyor, bunun için kendim mi bir rol saglayıcı yazmalımıyım ya da default rol saglayıcı için nasıl bi ayar yapabilir?
Teşekkürler.
Yanıtlar
-
Arkadaşlar sorunumu şu şekilde çözdüm. Web.Config içinde roleprovider tarzı tanımlamalara ihtiyacımız yok çünkü simplemembership ya da webmatrix tarzı bir package kullanmıyoruz. Giriş yaptıktan sonra role atamasının gerçekleşmesi için kendimiz AuthenticationModule yazmamız gerekiyor. App_Start klasörünün altına bir class oluşturdum ve aşağıdaki kodu kopyaladım.
http://nugetgallery.codeplex.com/[assembly: WebActivator.PreApplicationStartMethod(typeof(AuthenticationModule), "Start")] namespace Deneme.App_Start { public class AuthenticationModule : IHttpModule { public void Init(HttpApplication context) { context.AuthenticateRequest += OnAuthenticateRequest; } public void Dispose() { } public static void Start() { DynamicModuleUtility.RegisterModule(typeof(AuthenticationModule)); } private void OnAuthenticateRequest(object sender, EventArgs e) { var context = HttpContext.Current; var request = HttpContext.Current.Request; if (request.IsAuthenticated) { HttpCookie authCookie = request.Cookies[FormsAuthentication.FormsCookieName]; if (authCookie != null) { FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); var roles = authTicket.UserData.Split('|'); var user = new GenericPrincipal(context.User.Identity, roles); context.User = Thread.CurrentPrincipal = user; } } } } }
Tüm Yanıtlar
-
Selam Burada senin sorduğuna benzer bir soru var. Cevaplanmış. Kontrol edermisin ?
Veya aşağıdaki şekilde denermisin ?
@if (Request.IsAuthenticated && HttpContext.Current.User.IsInRole("Administrator")) { <li><a href="@Url.Action("Index", "Admin", new { area="Admin" })">Admin</a></li> }
-
-
Arkadaşlar sorunumu şu şekilde çözdüm. Web.Config içinde roleprovider tarzı tanımlamalara ihtiyacımız yok çünkü simplemembership ya da webmatrix tarzı bir package kullanmıyoruz. Giriş yaptıktan sonra role atamasının gerçekleşmesi için kendimiz AuthenticationModule yazmamız gerekiyor. App_Start klasörünün altına bir class oluşturdum ve aşağıdaki kodu kopyaladım.
http://nugetgallery.codeplex.com/[assembly: WebActivator.PreApplicationStartMethod(typeof(AuthenticationModule), "Start")] namespace Deneme.App_Start { public class AuthenticationModule : IHttpModule { public void Init(HttpApplication context) { context.AuthenticateRequest += OnAuthenticateRequest; } public void Dispose() { } public static void Start() { DynamicModuleUtility.RegisterModule(typeof(AuthenticationModule)); } private void OnAuthenticateRequest(object sender, EventArgs e) { var context = HttpContext.Current; var request = HttpContext.Current.Request; if (request.IsAuthenticated) { HttpCookie authCookie = request.Cookies[FormsAuthentication.FormsCookieName]; if (authCookie != null) { FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); var roles = authTicket.UserData.Split('|'); var user = new GenericPrincipal(context.User.Identity, roles); context.User = Thread.CurrentPrincipal = user; } } } } }