첫 번째로 사용자가 실제로 아무것도 할 수 없도록 막을 수는 없지만 특히 URL에서 ID를 변경하는 것과 같은 것입니다. 당신이 할 수있는 일은 실제 콘텐츠 대신 404 또는 403과 같은 것을 얻을 수 있도록하는 것입니다.
이 작업을 수행하는 방법은 객체 수준의 권한 부여를 수행하는 것입니다. 기본적으로 개체를 어떤 방식으로 보거나 편집 할 수있는 사용자에게 묶는 것입니다. 일반적으로이 작업은 "사용자"엔티티 또는 그룹이나 역할과 같은 더 광범위한 항목의 외래 키를 통해 수행됩니다.
예를 들어, "Student 380"레코드가 jdoe
에 의해 소유 된 경우 jdoe
을 제외한 모든 사용자가 액세스 할 수 없도록하려면 먼저 "학생"엔티티의 "사용자"엔티티에 외래 키를 추가하십시오. (지정되지 않은 이후, 신원을 가정) :
public class Student
{
...
[ForeignKey("Owner")]
public string OwnerId { get; set; }
public virtual ApplicationUser Owner { get; set; }
}
을 다음, 당신의 행동에, 대신 ID로 조회, 당신은 URL 및 인증 된 사용자의 ID에 ID를 모두 조회 :
사용자가
studentId
을 변경하지만 일치하는 학생의 "소유자"로 설정되어 있지 않은 경우
var userId = User.Identity.GetUserId();
var student = db.Students.SingleOrDefault(m => m.Id == studentId && m.OwnerId == userId);
if (student == null)
{
return new HttpNotFoundResult();
}
지금, 그들은 404
내가 ASP를 함께 작동하지만 사용자를 저장하지 않는거야 세션 변수 또는 쿠키의 ID를 확인한 다음 저장된 값을 비교합니다. 변수를 'studentId'의 값으로 변경하십시오. 일치하지 않으면 사용자를 어딘가에 리디렉션합니다. –