15-mavzu: Veb autentifikatsiya va identifikatsiya



Download 1,68 Mb.
bet9/14
Sana09.06.2022
Hajmi1,68 Mb.
#646265
1   ...   6   7   8   9   10   11   12   13   14
Bog'liq
autentifikatsiya, avtorizatsiya, seanslar

Rolni yaratish


@Html.ValidationSummary(false)
@using (Html.BeginForm())
{





@Html.ActionLink("Bekor qilish", "Index", null, new { @class = "btn btn-default" })
}





Rollarni tahrirlash
Foydalanuvchilarni avtorizatsiya qilish uchun rollarni yaratish va o‘chirishning o‘zi yetarli emas. Shuningdek, rollarni boshqarish, foydalanuvchilarga rolni tayinlash va roldan olib tashlash imkoniyati ham bo‘lishi kerak. Bu murakkab jarayon emas, lekin uni amalga oshirish uchun AppRoleManager klassidan foydalanib, rol ma’lumotlarini yuklash kerak, keyin AppUserManager klassi obyektida aniqlangan metodlarni chaqirish kerak.
UserViewModels.cs fayliga yangi View-model klasslarini qo‘shishamiz:
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace Users.Models


{
public class CreateModel
{
//...
}

public class LoginViewModel


{
//...
}

public class RoleEditModel


{
public AppRole Role { get; set; }
public IEnumerable Members { get; set; }
public IEnumerable NonMembers { get; set; }
}

public class RoleModificationModel


{
[Required]
public string RoleName { get; set; }
public string[] IdsToAdd { get; set; }
public string[] IdsToDelete { get; set; }
}
}


RolEditModel klassi rollar to‘g‘risidagi ma’lumotlarni o‘z ichiga oladi, hamda AppUser obyektlari ro‘yxati sifatida roldagi foydalanuvchilar ro‘yxatini qaytaradi. Buning yordamida roldagi har bir foydalanuvchi identifikatorini va nomini olish mumkin. Foydalanuvchi ma’lumotlarini tahrirlash paytida RoleModificationModel klassi ma’lumotlar bazasi tizimidan ma’lumotlarni oladi. U rollarni almashtirish uchun AppUser obyektlarini emas, balki foydalanuvchi identifikatorlarining ro‘yxatini o‘z ichiga oladi.
Model klasslarini aniqlagandan so‘ng, RoleAdmin controller-ga Edit roli metodlarini qo‘shamiz:
using System.Web;
using System.Web.Mvc;
using System.Threading.Tasks;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using System.ComponentModel.DataAnnotations;
using Users.Infrastructure;
using Users.Models;
using System.Linq;
using System.Collections.Generic;

namespace Users.Controllers


{
public class RoleAdminController : Controller
{
//...

public async Task Edit(string id)


{
AppRole role = await RoleManager.FindByIdAsync(id);
string[] memberIDs = role.Users.Select(x => x.UserId).ToArray();

IEnumerable members


= UserManager.Users.Where(x => memberIDs.Any(y => y == x.Id));

IEnumerable nonMembers = UserManager.Users.Except(members);


return View(new RoleEditModel


{
Role = role,
Members = members,
NonMembers = nonMembers
});
}

[HttpPost]


public async Task Edit(RoleModificationModel model)
{
IdentityResult result;
if (ModelState.IsValid)
{
foreach (string userId in model.IdsToAdd ?? new string[] { })
{
result = await UserManager.AddToRoleAsync(userId, model.RoleName);

if (!result.Succeeded)


{
return View("Error", result.Errors);
}
}
foreach (string userId in model.IdsToDelete ?? new string[] { })
{
result = await UserManager.RemoveFromRoleAsync(userId,
model.RoleName);
if (!result.Succeeded)
{
return View("Error", result.Errors);
}
}
return RedirectToAction("Index");
}
return View("Error", new string[] { "Rol topilmadi." });
}
}
}
Edit metodining GET versiyasidagi kodning asosiy qismi rolda bo‘lgan va rolda bo‘lmagan foydalanuvchilar ro‘yxatini tuzishga javobgar. Foydalanuvchilar guruhlanganidan keyin View qaytariladi, unga parameter sifatida RolEditModel obyekti uzatiladi.
Edit metodining POST versiyasi foydalanuvchilarni rollarga qo‘shish va undan o‘chirish uchun javobgar. AppUserManager klassi UserManager klassidagi rollar bilan ishlash uchun bir qator yordamchi metodlarni voris qilib oladi. Ushbu metodlar quyidagi jadvalda keltirilgan.



Nomi

Tavsifi

AddToRoleAsync(id, name)

Id identifikatorli foydalanuvchini name nomli rolga biriktiradi

GetRolesAsync(id)

Id identifikatorli foydalanuvchi rollari ro‘yxatini qaytaradi

IsInRoleAsync(id, name)

True, agar Id identifikatorli foydalanuvchini name nomli rolga ega bo‘lsa

RemoveFromRoleAsync(id, name)

Id identifikatorli foydalanuvchini name nomli roldan o‘chirish

Quyidagi misolda “/Views/RoleAdmin.cshtml” papkasida joylashgan Edit.cshtml View uchun kod ko‘rsatilgan:


@using Users.Models
@model RoleEditModel
@{
ViewBag.Title = "Rolni o’zgartirish";
}

Download 1,68 Mb.

Do'stlaringiz bilan baham:
1   ...   6   7   8   9   10   11   12   13   14




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish