2010-01-14 17 views
22

Bir kullanıcının kontrol birimimdeki açık rolünü almanın bir yolu var mı? Bu, ASP.NET Üyeliği ve Rol Sağlayıcılarını kullanmayı varsaymaktadır. "IsInRole" çalışmıyor - Aslında içinde oldukları rolün adını almam gerekiyor.güncel kullanıcının rolünü kazan

cevap

24

GetRoles yönteminden Roller listesi alabilirsiniz.

string[] rolesArray; 

    public void Page_Load() 
    { 
     RolePrincipal r = (RolePrincipal)User; 
     rolesArray = r.GetRoles(); 
     ...//extra code 
    } 
+8

kullanın "= etkin roleManager elemanı ve seti bulmak için web yapılandırma içine pop bir özellik olarak true. – MisterJames

25

(bağlantısından) kullanıcı olduğunu bir rol alamayan böylece bir kullanıcı birden fazla rolde olabilir, ama kolayca bir rol listesini alabilirsiniz kullanıcı içindedir

sen anda oturum açan içindedir rollerinin listesini almak için Roles türü kullanabilirsiniz. Eğer keyfi bir kullanıcı için rolleri almak istiyorsanız yapabilirsiniz

public ActionResult ShowUserRoles() { 
    string[] roleNames = Roles.GetRolesForUser(); 
    return View(roleNames); 
} 

Ya baba Roles.GetRolesForUser()'u aradığınızda kullanıcı adındaki ss.

+0

Ve DOB gibi özel kullanıcılara özgü veriler nasıl edinilir? – xameeramir

+2

@zameeramir, StackOverflow hakkında sormak için iyi bir soru gibi görünüyor. – Eilon

+0

burada: http://stackoverflow.com/questions/30216915/how-to-get-user-profile-data-from-asp-net-mvc-custom-identityuser-model/30217188#30217188 – xameeramir

12

Geçerli kullanıcının rolünü Roles.GetRolesForUser() ile alabilirsiniz.

Bir kullanıcı burada rol aitse

kontrol etmek ne yaptım: MVC4 içinde

Roles.GetRolesForUser().Contains("Administrator") 
+6

Ayrıca Bir kullanıcının User.IsInRole ("RolAdı") 'yi kullanarak bir rolde olup olmadığını kontrol edin' ' –

+0

Scotty.NET'in cevabı (bu yanıtın yorumunda), bir kullanıcının ait olup olmadığını kontrol etmenin daha iyi (daha hızlı) bir yol olacağını Bana belli bir rol için. – VoidKing

10

Simplemembership:

Alma Kullanım rol-

var role = System.Web.Security.Roles.GetRolesForUser().Single(); 

olmadığını kontrol etmek için kullanıcı bir role ait değil -

2

Bazı garip ayarların ya da kurulumların eksik olup olmadığını bilmiyorum, ancak ben örn. Çalışmak için User.IsInRole veya Roles.GetRolesForUser(). Sadece bir istisna alıyorum (boş referansı düşünüyorum) ve uygulama sadece durur. Microsoft tarafından Identity Sample projesinde olduğu gibi OwinContext ve Create yöntemi vb. Için bir RoleManager yapılandırmış olmama rağmen, web.config içinde Role Manager'ı etkinleştirdim. I (db ApplicationDbContext olan) bu gibi başka bir yaklaşım kullanarak ilk başta bu çözüldü:

var UserID = User.Identity.GetUserId();  
var userRoles = db.Roles.Include(r => r.Users).ToList(); 

var userRoleNames = (from r in userRoles 
          from u in r.Users 
          where u.UserId == UserID 
          select r.Name).ToList(); 

Bu en iyi duruma yol olmayabilir ve muhtemelen bir daha basit forma değiştirilebilir ama benim için çalıştı ve may Diğer yaklaşımlar kadar fazla kurulum/bağımlılık gerektirmez. İkinci yaklaşım bu (Denetleyiciniz sınıfına bu ekleyin) olduğu:

private ApplicationDbContext db = new ApplicationDbContext(); 
    private ApplicationUserManager _userManager; 
    public ApplicationUserManager UserManager 
    { 
     get 
     { 
      return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
     } 
     set 
     { 
      _userManager = value; 
     } 
    } 

    private ApplicationRoleManager _roleManager; 
    public ApplicationRoleManager RoleManager 
    { 
     get 
     { 
      return _roleManager ?? HttpContext.GetOwinContext().Get<ApplicationRoleManager>(); 
     } 
     private set 
     { 
      _roleManager = value; 
     } 
    } 

Kumandanızda İçerisinde şimdi mesela yapabilirsiniz:

var UserID = User.Identity.GetUserId(); 
var RolesForUser = await UserManager.GetRolesAsync(UserID); 

ben sadece ASP.NET MVC 5 uygulamasını kullanıyorum açık ol. RoleManager bu örnekte kullanılmaz, ancak rol oluşturma, bulma, güncelleme vb. Için kullanılabilir. Bu yaklaşımı kullanmak, uygulamanızın bir yararı olması durumunda, beklemede olan çağrıların beklemede kullanılmasına izin verir.

0

Sana Rol Yöneticisi hakkında burada bir hata içine çalıştırırsanız etkinleştirilen değil, bu çalıştırmak Diğerleri için bu kodu

((ClaimsIdentity)User.Identity).FindAll(ClaimTypes.Role).ToList() 
.OrderBy(x => x.Value == "admin" ? 1 
: x.Value == "Salesperson" ? 2 
: x.Value == "User" ? 3 : 4).First().Value 
İlgili konular