Tôi đang viết một hệ thống lưu trữ tệp ví dụ (ví dụ: chỉ cho stackoverflow).Xác nhận quyền sở hữu đối với các tài nguyên cụ thể
mô hình miền hiện tại của tôi trông như thế:
public class User
{
public int ID { get; set; }
public string LoginIdentifier { get; set; }
public string Password { get; set; }
}
public class File
{
public int ID { get; set; }
public int UserID { get; set; }
public string FileName { get; set; }
public byte[] Data { get; set; }
}
Mã Tôi viết thư này để tạo ra các IPrincipal:
private static IPrincipal CreatePrincipal(User user)
{
Debug.Assert(user != null);
var identity = new GenericIdentity(user.LoginIdentifier, "Basic");
// TODO: add claims
identity.AddClaim(new Claim("Files", "Add"));
return new GenericPrincipal(identity, new[] { "User" });
}
Trong hệ thống của tôi, người dùng có thể thêm các tập tin, họ cũng có thể lấy , xóa và cập nhật chúng, tuy nhiên, hãy báo trước rằng người dùng chỉ có thể truy xuất và sửa đổi tệp của riêng họ (trong đó File.UserID
phải khớp với danh tính của người dùng đã đăng nhập).
Trình điều khiển tệp của tôi trông như sau.
[Authorize]
public class FilesController : ApiController
{
private readonly FileRepository _fileRepository = new FileRepository();
public void Post(File file)
{
// not sure what to do here (...pseudo code...)
if (!CheckClaim("Files", "Add"))
{
throw new HttpError(HttpStatusCode.Forbidden);
}
// ... add the file
file.UserID = CurrentPrincipal.UserID; // more pseudo code...
_fileRepository.Add(file);
}
public File Get(int id)
{
var file = _fileRepository.Get(id);
// not sure what to do here (...pseudo code...)
if (!CheckClaim("UserID", file.UserID))
{
throw new HttpError(HttpStatusCode.Forbidden);
}
return file;
}
}
Có thể sử dụng Claim
s không phải là công cụ thích hợp cho công việc, nhưng hy vọng này minh họa các vấn đề.
Tôi nên kết nối bộ điều khiển của mình như thế nào để đảm bảo người dùng hiện đã đăng nhập có quyền truy cập để thực hiện các hành động cụ thể và cụ thể hơn, một số tài nguyên nhất định?
trong trường hợp này, tôi nghĩ rằng yêu cầu bồi thường sẽ là 'UserID'. – Matthew
Vâng, điều đó có ý nghĩa. Bạn cũng có thể có xác nhận quyền sở hữu để thể hiện vai trò người dùng. Sau đó, bạn ánh xạ vai trò cho một tập hợp các quyền. Ví dụ, Admin => Add File, Remove File, vv –