在ASP.NET中實現三層架構的權限控制通常涉及以下幾個步驟:
首先,你需要定義系統中的角色和權限。角色通常對應于一組權限,權限則是一組可以執行的操作。
public enum Role
{
Admin,
User,
Guest
}
public enum Permission
{
Read,
Write,
Delete
}
創建一個用戶和角色管理類來處理用戶的注冊、登錄和角色分配。
public class UserManager
{
private readonly Dictionary<int, User> _users = new Dictionary<int, User>();
public void AddUser(User user)
{
_users[user.Id] = user;
}
public User GetUserById(int id)
{
return _users.TryGetValue(id, out var user) ? user : null;
}
public void AssignRole(int userId, Role role)
{
var user = GetUserById(userId);
if (user != null)
{
user.Role = role;
}
}
}
public class User
{
public int Id { get; set; }
public string Username { get; set; }
public Role Role { get; set; }
}
創建一個權限檢查類來驗證用戶是否具有執行特定操作的權限。
public class PermissionChecker
{
private readonly UserManager _userManager;
public PermissionChecker(UserManager userManager)
{
_userManager = userManager;
}
public bool HasPermission(int userId, Permission permission)
{
var user = _userManager.GetUserById(userId);
if (user == null)
{
return false;
}
switch (user.Role)
{
case Role.Admin:
return true;
case Role.User:
return user.Permissions.Contains(permission);
case Role.Guest:
return false;
default:
throw new InvalidOperationException("Invalid role");
}
}
}
在控制器或服務層中使用權限檢查類來確保用戶只能執行他們被授權的操作。
[Authorize]
public class ArticleController : Controller
{
private readonly PermissionChecker _permissionChecker;
public ArticleController(PermissionChecker permissionChecker)
{
_permissionChecker = permissionChecker;
}
[HttpPost("delete")]
public IActionResult DeleteArticle(int articleId)
{
if (_permissionChecker.HasPermission(User.FindFirstValue(ClaimTypes.NameIdentifier), Permission.Delete))
{
// 刪除文章的邏輯
return Ok();
}
else
{
return Unauthorized();
}
}
}
使用ASP.NET Core的身份驗證和授權系統來管理用戶登錄和會話。
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentity<User, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddControllersWithViews();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
通過以上步驟,你可以在ASP.NET三層架構中實現權限控制。關鍵在于定義角色和權限,創建用戶和角色管理類,實現權限檢查類,并在控制器或服務層中使用這些類來確保用戶只能執行他們被授權的操作。同時,使用ASP.NET Core的身份驗證和授權系統來管理用戶登錄和會話。