이 글에서는 주로 asp.net 핵심 mvc 권한 제어, 즉 뷰에서 작업 권한을 제어하는 방법을 소개합니다. 아주 좋은 참고값을 가지고 있습니다.
asp.net core mvc에서 권한 확인 프레임워크를 제공합니다. 이전 글에서는 권한 제어 및 권한 구성 방법을 소개했습니다. 이후에는 권한 확인 로직이 자동으로 실행되지만 경우에 따라 코드나 뷰에서 권한을 수동으로 확인해야 할 수도 있습니다. 이제 구체적인 작업 방법을 소개하겠습니다.
컨트롤러 메소드에서 현재 사용자에게 특정 권한이 있는지 확인하려면 HttpContext.User.HasClaim(string cliamtype, string cliamvalue) 메소드를 직접 사용하여 bool 유형을 반환하면 됩니다. true를 반환합니다. 권한이 있음을 나타내고, 그렇지 않으면 권한이 없음을 나타냅니다.
뷰에서는 특정 버튼이나 하이퍼링크의 권한을 제어해야 하는 경우가 많습니다. 버튼에 권한이 있으면 표시되고 그렇지 않으면 비현실적입니다. 그렇다면 어떻게 그러한 효과를 얻을 수 있습니까? 메소드는 다음과 같이 소개됩니다.
1. 뷰에서 직접 HttpContext.User.HasClaim(문자열 cliamtype, 문자열 cliamvalue)을 사용하여 권한을 확인한 후 버튼 표시 여부를 제어합니다
@if(HttpContext.User.HasClaim("User","Delete")) { <input type='button' value="删除"/> }
위 코드는 뷰에 작성되었는데, 이는 사용자에게 삭제 권한이 있는 경우 삭제 버튼이 표시됩니다. 예를 들어 이런 식으로 확인해야 할 모든 장소는 이 형식으로 작성됩니다.
2. 첫 번째 방법은 asp.net Core mvc의 새로운 기능인 taghelper를 사용하여 단순화할 수 있습니다. Baidu 또는 Google에서 검색할 수 있습니다. 여기서는 권한 확인을 위해 taghelper를 사용자 정의하는 방법을 직접 소개합니다.
<a asp-claim="goods,edit" asp-action="addgoods" asp-route-id="@goods.Id" class="btn-icon " title="编辑"> <i class="icon-common-edit icon-pencil"></i></a>
위 코드는 사용자가 소유권을 주장할 때 이 하이퍼링크를 사용할 수 있음을 나타내는 최종 효과입니다(유형= 상품, 값=편집) 권한에 대한 태그헬퍼 구현 방법을 소개하겠습니다.
1) 먼저 TagHelper 클래스에서 파생된 클래스를 정의하고 클레임 속성 정의를 추가한 다음 ViewContext를 추가합니다
class ClaimTagHelper:TagHelper { private const string ClaimAttributeName = "asp-claim"; public ClaimTagHelper() { } [HtmlAttributeName(ClaimAttributeName)] public string Claim { get; set; } }
2) 권한 제어 태그 헬퍼는 버튼, a, 입력 요소에만 사용되므로 다음의 기능과 코드를 추가해야 합니다. HtmlTargetElement 다음과 같습니다.
[HtmlTargetElement("a", Attributes = ClaimAttributeName)] [HtmlTargetElement("button", Attributes = ClaimAttributeName)] [HtmlTargetElement("input", Attributes = ClaimAttributeName, TagStructure = TagStructure.WithoutEndTag)] public class ClaimTagHelper: TagHelper { ...... }
3) TagHelper의 Process 메서드를 다시 작성합니다. HttpContext.User.HasClaim을 사용하여 권한을 결정하는 메서드에서 뷰에서 HttpContext에 액세스하려면 ViewContext 개체를 사용해야 하므로 현재 TagHelper 클래스에 ViewContext 참조를 추가해야 합니다. 구체적인 코드는 다음과 같습니다.
public class ClaimTagHelper: TagHelper { ..... [HtmlAttributeNotBound] [ViewContext] public ViewContext ViewContext { get; set; } ..... }
기본 조건이 모두 충족되고 프로세스 구현이 있습니다. 코드를 직접 입력하세요.
public override void Process(TagHelperContext context, TagHelperOutput output) { if (string.IsNullOrEmpty(Claim)) { return; } string[] claimData = Claim.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries); if (claimData.Length == 1) { if (!ViewContext.HttpContext.User.HasClaim(m => m.Type == claimData[0])) { //无权限 output.SuppressOutput(); } } else { if (!ViewContext.HttpContext.User.HasClaim(m => m.Type == claimData[0] && m.Value == claimData[1])) { //无权限 output.SuppressOutput(); } } }
그건 여기까지 소개 모두 감사드립니다. 부족한 점이 있으면 모두의 지도를 환영합니다.
위는 asp.net 코어 mvc 권한 제어를 사용하여 뷰에서 작업 권한을 제어하는 코드 예제에 대한 자세한 소개입니다. .php.cn)!