旗下导航:搜·么
当前位置:网站首页 > .Net教程 > 正文

asp.net core mvc权限掌握 在视图中掌握操纵权限的代码示例细致引见【C#.Net教程】,asp.net,core,mvc

作者:搜教程发布时间:2019-11-27分类:.Net教程浏览:30评论:0


导读:本文重要引见了asp.netcoremvc权限掌握:在视图中掌握操纵权限。具有很好的参考价值,下面随着小编一起来看下吧在asp.netcoremvc中供应了权限考证...
本文重要引见了asp.net core mvc权限掌握:在视图中掌握操纵权限。具有很好的参考价值,下面随着小编一起来看下吧

在asp.net core mvc中供应了权限考证框架,前面的文章中已引见了怎样举行权限掌握设置,权限设置好后,权限考证逻辑自动就会实行,但是在某些情况下,我们能够须要在代码里或许视图中经由过程手工体式格局推断权限,我们如今就来引见下细致的操纵要领。

假如在掌握器要领里想要推断当前用户是不是具有某个权限,能够直接运用HttpContext.User.HasClaim(string cliamtype,string cliamvalue)要领举行推断,该要领返回bool范例,返回true示意具有权限,不然不具有。

在视图上我们每每须要掌握某个按钮或许超链接的权限,具有权限按钮就显现,不然不现实。那怎样才到达如许的结果?要领引见以下:

1,在视图中直接运用HttpContext.User.HasClaim(string cliamtype,string cliamvalue)推断权限,然后掌握按钮是不是显现


@if(HttpContext.User.HasClaim("User","Delete"))
{
<input type='button' value="删除"/>
}


上面的代码写在视图中,示意假如具有用户的删除权限,就显现删除按钮。这类体式格局比方在一切须要考证的处所,都根据如许的花样去誊写。

2,借助于asp.net core mvc的新特征taghelper能够简化第一种体式格局,至于什么是taghelper,以及它的作用这里就不再引见,人人能够百度或谷歌搜刮,这里直接引见怎样自定义权限考证的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>


上面的代码是我们终究的结果,示意这个超链接是有在用户具有claim(type=goods,value=edit)权限的时刻才显现,下面我们就来引见怎样完成这个taghelper。

1)起首我们定义一个类,派生自TagHelper类,并增添claim属性定义,并增添ViewContext


class ClaimTagHelper:TagHelper
{
private const string ClaimAttributeName = "asp-claim";
    public ClaimTagHelper()
    {
    }
    [HtmlAttributeName(ClaimAttributeName)]
    public string Claim { get; set; }
}


2)我们的权限掌握taghelper只运用于button,a,input的元素上,一切我们须要加上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; } 
.....
}


基本条件都具有了,然后就是Process完成,直接上代码:


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 core mvc权限掌握 在视图中掌握操纵权限的代码示例细致引见的内容,更多相关内容请关注ki4网(www.ki4.cn)!

标签:asp.netcoremvc


欢迎 发表评论: