de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 colbyJax
colbyJax
Question

Menciptakan Peran dalam Asp.net Identitas MVC 5

Ada sangat sedikit dokumentasi tentang menggunakan baru Asp.net Identitas Kerangka Keamanan.

Saya telah disatukan apa yang saya bisa untuk mencoba dan menciptakan Peran baru dan menambahkan Pengguna ke dalamnya. Saya mencoba yang berikut ini: https://stackoverflow.com/questions/19541101/add-role-in-asp-net-identity

yang terlihat seperti itu mungkin telah mendapat info dari blog ini: bangunan sederhana to-do aplikasi dengan asp.net identitas dan menghubungkan pengguna dengan ke-tidak

Saya telah menambahkan kode ke Database Initializer yang dijalankan setiap kali perubahan model. Gagal di RoleExists fungsi dengan error berikut:

Sistem.InvalidOperationException terjadi di mscorlib.dll Jenis entitas IdentityRole bukan bagian dari model untuk konteks saat ini.

protected override void Seed (MyContext context)
{
    var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context)); 
    var RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));

    // Create Admin Role
    string roleName = "Admins";
    IdentityResult roleResult;

    // Check to see if Role Exists, if not create it
    if (!RoleManager.RoleExists(roleName))
    {
        roleResult = RoleManager.Create(new IdentityRole(roleName));
    }
}

Setiap bantuan sangat dihargai.

82 2013-10-31T02:08:52+00:00 11
 Community
Community
Pertanyaan edit 23 Mei 2017 в 12:32
Pemrograman
c#
asp.net-mvc-5
asp.net-identity
Piotr Stulinski
Piotr Stulinski
31 Oktober 2013 в 10:47
2013-10-31T10:47:17+00:00
Lebih
Sumber
Sunting
#22673138

Di sini kita pergi:

var roleManager = new RoleManager<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));

   if(!roleManager.RoleExists("ROLE NAME"))
   {
      var role = new Microsoft.AspNet.Identity.EntityFramework.IdentityRole();
      role.Name = "ROLE NAME";
      roleManager.Create(role);

    }
72
0
Sheo Narayan
Sheo Narayan
26 Juni 2014 в 1:38
2014-06-26T01:38:31+00:00
Lebih
Sumber
Sunting
#22673140

Berikut ini adalah artikel yang menjelaskan cara membuat peran, memodifikasi peran, menghapus peran dan mengelola peran menggunakan ASP.NET Identitas. Hal ini juga berisi User interface, controller metode dll.

http://www.dotnetfunda.com/articles/show/2898/working-with-roles-in-aspnet-identity-for-mvc

Harapan ini helpls

Terima kasih

25
0
Solution / Answer
 jd4u
jd4u
31 Oktober 2013 в 6:25
2013-10-31T06:25:20+00:00
Lebih
Sumber
Sunting
#22673137

Pastikan anda telah mengikuti tanda tangan anda MyContext kelas

public class MyContext : IdentityDbContext<MyUser>

Atau

public class MyContext : IdentityDbContext

Kode ini bekerja untuk saya, tanpa modifikasi apapun!!!

24
0
 nothrow
nothrow
20 Desember 2015 в 2:11
2015-12-20T14:11:12+00:00
Lebih
Sumber
Sunting
#22673144

Dalam ASP.NET 5 rc1-final, yang saya lakukan sebagai berikut:

Dibuat ApplicationRoleManager (dalam cara yang sama seperti yang ada ApplicationUser yang dibuat oleh template)

public class ApplicationRoleManager : RoleManager<IdentityRole>
{
    public ApplicationRoleManager(
        IRoleStore<IdentityRole> store,
        IEnumerable<IRoleValidator<IdentityRole>> roleValidators,
        ILookupNormalizer keyNormalizer,
        IdentityErrorDescriber errors,
        ILogger<RoleManager<IdentityRole>> logger,
        IHttpContextAccessor contextAccessor)
        : base(store, roleValidators, keyNormalizer, errors, logger, contextAccessor)
    {
    }
}

Untuk ConfigureServices di Startup.cs, saya menambahkan ini sebagai RoleManager

services.
    .AddIdentity<ApplicationUser, IdentityRole>()
    .AddRoleManager<ApplicationRoleManager>();

Untuk menciptakan Peran baru, panggilan dari Configure berikut ini:

public static class RoleHelper
{
    private static async Task EnsureRoleCreated(RoleManager<IdentityRole> roleManager, string roleName)
    {
        if (!await roleManager.RoleExistsAsync(roleName))
        {
            await roleManager.CreateAsync(new IdentityRole(roleName));
        }
    }
    public static async Task EnsureRolesCreated(this RoleManager<IdentityRole> roleManager)
    {
        // add all roles, that should be in database, here
        await EnsureRoleCreated(roleManager, "Developer");
    }
}

public async void Configure(..., RoleManager<IdentityRole> roleManager, ...)
{
     ...
     await roleManager.EnsureRolesCreated();
     ...
}

Sekarang, aturan dapat diberikan ke pengguna

await _userManager.AddToRoleAsync(await _userManager.FindByIdAsync(User.GetUserId()), "Developer");

Atau digunakan dalam Otorisasi atribut

[Authorize(Roles = "Developer")]
public class DeveloperController : Controller
{
}
 nothrow
nothrow
Jawaban edit 20 Desember 2015 в 10:32
15
0
Dave Gordon
Dave Gordon
9 Juni 2014 в 5:59
2014-06-09T17:59:05+00:00
Lebih
Sumber
Sunting
#22673139

Sebagai perbaikan pada Peters kode di atas, anda dapat menggunakan ini:

   var roleManager = new RoleManager<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));

   if (!roleManager.RoleExists("Member"))
            roleManager.Create(new IdentityRole("Member"));
6
0
Dane W
Dane W
7 Maret 2015 в 4:41
2015-03-07T04:41:16+00:00
Lebih
Sumber
Sunting
#22673142

Saya aplikasi tergantung pada startup ketika saya digunakan Peter Stulinski & Dave Gordon's kode sampel dengan EF 6.0. Aku berubah:

var roleManager = new RoleManager<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));

untuk

var roleManager = new RoleManager<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>(new RoleStore<IdentityRole>(**context**));

Yang masuk akal ketika dalam metode benih anda don't ingin instantiate contoh lain dari ApplicationDBContext. Ini mungkin telah diperparah oleh fakta bahwa saya memiliki Database.SetInitializer<ApplicationDbContext>(baru ApplicationDbInitializer()); dalam konstruktor dari ApplicationDbContext

 user1666620
user1666620
Jawaban edit 13 Oktober 2015 в 4:35
3
0
 Moji
Moji
27 Agustus 2015 в 2:24
2015-08-27T14:24:32+00:00
Lebih
Sumber
Sunting
#22673143

Peran Lihat Model

public class RoleViewModel
{
    public string Id { get; set; }
    [Required(AllowEmptyStrings = false)]
    [Display(Name = "RoleName")]
    public string Name { get; set; }
}

Metode Controller

    [HttpPost]
    public async Task<actionResult> Create(RoleViewModel roleViewModel)
    {
       if (ModelState.IsValid)
       {
           var role = new IdentityRole(roleViewModel.Name);
           var roleresult = await RoleManager.CreateAsync(role);
           if (!roleresult.Succeeded)
           {
               ModelState.AddModelError("", roleresult.Errors.First());
               return View();
           }
           return RedirectToAction("some_action");
       }
       return View();
    }
2
0
 JoshYates1980
JoshYates1980
25 Februari 2015 в 9:04
2015-02-25T21:04:13+00:00
Lebih
Sumber
Sunting
#22673141

Saya ingin berbagi solusi lain untuk menambahkan peran:

<h2>Create Role</h2>

@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<span class="label label-primary">Role name:</span>
<p>
    @Html.TextBox("RoleName", null, new { @class = "form-control input-lg" })
</p>
<input type="submit" value="Save" class="btn btn-primary" />
}

Controller:

    [HttpGet]
    public ActionResult AdminView()
    {
        return View();
    }

    [HttpPost]
    public ActionResult AdminView(FormCollection collection)
    {
        var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));

        if (roleManager.RoleExists(collection["RoleName"]) == false)
        {
            Guid guid = Guid.NewGuid();
            roleManager.Create(new IdentityRole() { Id = guid.ToString(), Name = collection["RoleName"] });
        }
        return View();
    }
1
0
Stephan Ahlf
Stephan Ahlf
7 Desember 2016 в 8:59
2016-12-07T08:59:48+00:00
Lebih
Sumber
Sunting
#22673145
    public static void createUserRole(string roleName)
    {
        if (!System.Web.Security.Roles.RoleExists(roleName))
        {
            System.Web.Security.Roles.CreateRole(roleName);
        }
    }
0
0
 Kevin
Kevin
13 Januari 2017 в 1:30
2017-01-13T13:30:35+00:00
Lebih
Sumber
Sunting
#22673146

metode yang saya Gunakan untuk menciptakan peran adalah di bawah ini, menugaskan mereka untuk pengguna di kode juga tercantum. kode di bawah ini tidak dapat di "konfigurasi.cs" dalam migrasi folder.

string [] roleNames = { "role1", "role2", "role3" };
var RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));

                IdentityResult roleResult;
                foreach(var roleName in roleNames)
                {
                    if(!RoleManager.RoleExists(roleName))
                    {
                        roleResult = RoleManager.Create(new IdentityRole(roleName));
                    }
                }
                var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
                UserManager.AddToRole("user", "role1");
                UserManager.AddToRole("user", "role2");
                context.SaveChanges();
0
0
Hamza Khanzada
Hamza Khanzada
2 Juli 2019 в 6:12
2019-07-02T06:12:57+00:00
Lebih
Sumber
Sunting
#22673147

Jika anda menggunakan template default yang dibuat ketika anda memilih baru ASP.net aplikasi Web dan dipilih masing-Masing akun Pengguna sebagai Otentikasi dan mencoba untuk membuat pengguna dengan Peran jadi di sini adalah solusinya. Dalam Akun Controller's Daftarkan metode yang disebut menggunakan [HttpPost], tambahkan baris berikut di jika kondisi.

menggunakan Microsoft.AspNet.Identitas.EntityFramework;

var user = new ApplicationUser { UserName = model.Email, Email = model.Email };

var result = await UserManager.CreateAsync(user, model.Password);

if (result.Succeeded)
{
  var roleStore = new RoleStore<IdentityRole>(new ApplicationDbContext());
  var roleManager = new RoleManager<IdentityRole>(roleStore);
  if(!await roleManager.RoleExistsAsync("YourRoleName"))
     await roleManager.CreateAsync(new IdentityRole("YourRoleName"));

  await UserManager.AddToRoleAsync(user.Id, "YourRoleName");
  await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
  return RedirectToAction("Index", "Home");
}

Ini akan membuat terlebih dahulu membuat peran dalam database anda dan kemudian menambahkan pengguna baru dibuat untuk peran ini.

0
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Asilbek Qadamboyev
Terdaftar 2 hari yang lalu
2
Akshit Mehta
Terdaftar 4 hari yang lalu
3
me you
Terdaftar 1 minggu yang lalu
4
Никита иванов
Terdaftar 1 minggu yang lalu
5
Alex1976G_06
Terdaftar 1 minggu yang lalu
ID
JA
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi