Saya memiliki aplikasi di mana pengguna dapat diberi peran berikut:

  • SuperAdmin
  • Admin
  • Pengguna

Satu pengguna mungkin telah menetapkan dua atau lebih peran, mis. baik SuperAdmin maupun Pengguna. Aplikasi saya menggunakan klaim, dan oleh karena itu saya ingin mengautentikasi peran pengguna melalui klaim juga. Suka:

[Authorize(Roles="Admin")]

Sayangnya, saya tidak tahu bagaimana saya bisa menambahkan banyak peran ke ClaimTypes.Role saya. Saya memiliki kode berikut:

var identity = new ClaimsIdentity(new[] {
                new Claim(ClaimTypes.Name, name),
                new Claim(ClaimTypes.Email, email),
                new Claim(ClaimTypes.Role, "User", "Admin", "SuperAdmin")
        },
            "ApplicationCookie");

Seperti yang Anda lihat, saya mencoba menambahkan lebih banyak peran demi ilustrasi, tetapi jelas itu dilakukan dengan cara yang salah, dan karenanya tidak berhasil. Oleh karena itu, bantuan apa pun sangat dihargai.

40
Jeppe Christensen 14 Maret 2017, 19:27

2 jawaban

Jawaban Terbaik

Identitas klaim dapat memiliki beberapa klaim dengan ClaimType yang sama. Itu akan memungkinkan untuk menggunakan metode HasClaim untuk memeriksa apakah ada peran pengguna tertentu.

var identity = new ClaimsIdentity(new[] {
            new Claim(ClaimTypes.Name, name),
            new Claim(ClaimTypes.Email, email),
            new Claim(ClaimTypes.Role, "User"),
            new Claim(ClaimTypes.Role, "Admin"), 
            new Claim(ClaimTypes.Role,"SuperAdmin")
    },
        "ApplicationCookie");
64
Parameswar Rao 14 Maret 2017, 16:33

@Parameswar Rao menjelaskan dengan baik tetapi dalam hal peran dinamis

Misalnya objek pengguna sudah memiliki peran properti dari daftar tipe seperti

enter image description here

Lalu gunakan fungsi lokal

  ClaimsIdentity getClaimsIdentity()
                {
                    return new ClaimsIdentity(
                        getClaims()
                        );

                   Claim[] getClaims()
                    {
                        List<Claim> claims = new List<Claim>();
                        claims.Add(new Claim(ClaimTypes.Name, user.UserName));
                        foreach (var item in user.Roles)
                        {
                            claims.Add(new Claim(ClaimTypes.Role, item));
                        }
                        return claims.ToArray();
                    }

                }
                    var tokenDescriptor = new SecurityTokenDescriptor
                    {


                        Subject = getClaimsIdentity()
                    }
3
TAHA SULTAN TEMURI 30 September 2019, 07:23