Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan kawalan kebenaran dan pengesahan dalam C#

Cara menggunakan kawalan kebenaran dan pengesahan dalam C#

王林
王林asal
2023-10-09 11:01:471150semak imbas

Cara menggunakan kawalan kebenaran dan pengesahan dalam C#

Cara menggunakan kawalan kebenaran dan pengesahan dalam C# memerlukan contoh kod khusus

Dalam era Internet hari ini, isu keselamatan maklumat telah mendapat perhatian yang semakin meningkat. Untuk melindungi keselamatan sistem dan data, kawalan kebenaran dan pengesahan telah menjadi bahagian yang sangat diperlukan untuk pembangun. Sebagai bahasa pengaturcaraan yang biasa digunakan, C# menyediakan pelbagai fungsi dan perpustakaan kelas untuk membantu kami melaksanakan kawalan kebenaran dan pengesahan.

Kawalan kebenaran merujuk kepada menyekat akses pengguna kepada sumber tertentu berdasarkan identiti pengguna, peranan, kebenaran, dsb. Cara biasa untuk melaksanakan kawalan kebenaran ialah menggunakan sistem pengurusan peranan dan kebenaran. Di bawah ini kami menggunakan contoh khusus untuk memperkenalkan cara menggunakan kawalan kebenaran dalam C#.

Pertama, kita perlu mencipta jadual pangkalan data peranan dan kebenaran. Struktur jadual boleh direka mengikut keperluan tertentu Di sini kita ringkaskan kepada dua jadual iaitu jadual Peranan dan Kebenaran. Jadual Peranan menyimpan maklumat peranan, dan jadual Kebenaran menyimpan maklumat kebenaran. Struktur jadual adalah seperti berikut:

CREATE TABLE Role (
    Id INT PRIMARY KEY,
    Name VARCHAR(50) NOT NULL
)

CREATE TABLE Permission (
    Id INT PRIMARY KEY,
    Name VARCHAR(50) NOT NULL,
    RoleId INT,
    FOREIGN KEY(RoleId) REFERENCES Role(Id)
)

Seterusnya, tentukan kelas entiti peranan dan kebenaran dalam C#:

public class Role
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Permission
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int RoleId { get; set; }
}

Kemudian, kita perlu menulis logik pengesahan kebenaran dalam kod. Secara umumnya, kita boleh menilai kebenaran di pintu masuk sistem, seperti dalam pembina pengawal. Berikut ialah contoh pengesahan kebenaran mudah:

public class HomeController : Controller
{
    private readonly IPermissionService _permissionService;

    public HomeController(IPermissionService permissionService)
    {
        _permissionService = permissionService;
    }

    public IActionResult Index()
    {
        if(!_permissionService.HasPermission(User.Identity.Name, "HomePageAccess"))
        {
            return Unauthorized();
        }
        
        return View();
    }
}

Dalam contoh di atas, kami mengakses perkhidmatan pengesahan kebenaran melalui antara muka IPermissionService. Dalam pelaksanaan perkhidmatan, kami boleh menanyakan pangkalan data untuk menentukan sama ada pengguna mempunyai kebenaran yang sepadan. Di sini kami memudahkannya untuk terus menggunakan kaedah untuk menentukan kebenaran:

public interface IPermissionService
{
    bool HasPermission(string username, string permissionName);
}

public class PermissionService : IPermissionService
{
    public bool HasPermission(string username, string permissionName)
    {
        // 根据用户名和权限名查询数据库,判断用户是否有权限
        // 这里省略具体的数据库查询过程
        
        // 假设用户有权限
        return true;
    }
}

Melalui contoh kod di atas, kami boleh melaksanakan fungsi kawalan kebenaran yang mudah. Apabila pengguna mengakses halaman utama (Index), sistem akan menentukan sama ada pengguna mempunyai kebenaran HomePageAccess, dan jika tidak, kembalikan 401 Tanpa Kebenaran.

Selain itu, selain kawalan kebenaran, pengesahan identiti juga merupakan kunci untuk memastikan keselamatan sistem. Dalam C#, anda boleh menggunakan fungsi pengesahan yang disediakan dalam ASP.NET Core untuk mengesahkan pengguna. Berikut ialah contoh pengesahan menggunakan Teras ASP.NET:

public class AccountController : Controller
{
    private readonly UserManager<ApplicationUser> _userManager;
    private readonly SignInManager<ApplicationUser> _signInManager;

    public AccountController(UserManager<ApplicationUser> userManager, SignInManager<ApplicationUser> signInManager)
    {
        _userManager = userManager;
        _signInManager = signInManager;
    }

    public IActionResult Login()
    {
        return View();
    }

    [HttpPost]
    public async Task<IActionResult> Login(LoginViewModel model)
    {
        if (ModelState.IsValid)
        {
            var result = await _signInManager.PasswordSignInAsync(model.Username, model.Password, model.RememberMe, lockoutOnFailure: true);
            
            if (result.Succeeded)
            {
                return RedirectToAction("Index", "Home");
            }
            else if (result.IsLockedOut)
            {
                ModelState.AddModelError(string.Empty, "账户被锁定,请稍后再试。");
            }
            else
            {
                ModelState.AddModelError(string.Empty, "用户名或密码错误。");
            }
        }

        return View();
    }
}

Dalam contoh di atas, kami menggunakan UserManager dan SignInManager yang disediakan oleh ASP.NET Core untuk mengesahkan pengguna. Dalam tindakan log masuk (Log Masuk), kami mengesahkan nama pengguna dan kata laluan pengguna dengan memanggil kaedah PasswordSignInAsync.

Ringkasnya, C# menyediakan pelbagai fungsi dan perpustakaan kelas untuk membantu kami melaksanakan kawalan kebenaran dan pengesahan. Dengan menggunakan sistem pengurusan peranan dan kebenaran secara rasional, digabungkan dengan fungsi pengesahan yang disediakan oleh ASP.NET Core, kami boleh memberikan perlindungan yang berkesan untuk sistem dan data serta memastikan keselamatan sistem. Sudah tentu, kaedah pelaksanaan khusus perlu diselaraskan mengikut keperluan sebenar dan skala projek.

Atas ialah kandungan terperinci Cara menggunakan kawalan kebenaran dan pengesahan dalam C#. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn