一般我们在开发后台系统的时候都会有权限验证的功能,有菜单权限和按钮权限也许还有数据权限。最近做一个按钮权限发现asp.net core增加了TagHelper,相比HtmlHelper来说可读性更好。微软为我们提供了很多默认实现,这些tag一般是以asp-开头。比如超链接就可以用asp-controller和asp-action来设置要跳转到的action,Razor在渲染的时候替换为a标签的href属性。这种方法更贴近html相对于HtmlHelper来说也更直观一些。
1 | <a asp-controller="Speaker" asp-action="Evaluations">Speaker Evaluations</a> |
以往我们做按钮权限的时候会扩展一下HtmlHelper,增加一个类似HasPermission的方法判断有没有权限。在没有权限的时候就不渲染按钮。
1 | @if (Html.HasPermission("/demo/list:delete")) |
现在我们有了一个新的选择,我们可以在button中增加一个新的属性来判断权限。TagHelper可以通过扩展html标签或者属性来改变输出的html内容。我们的按钮有两种样式a标签和button标签,所以使用了扩展HTML属性的方式。[HtmlTargetElement(Attributes = “tg-permission”)]让我们在Razor页面中任何标签都可以使用tg-permission属性。output.SuppressOutput()的意思是不输出内容,这里会把整个标签从HTML内容中去除。
1 | [HtmlTargetElement(Attributes = "tg-permission")] |
写完扩展类之后并不能直接使用,还需要在_ViewImports.cshtml中使用@addTagHelper *, Demo.Web注册一下。最后需要判断权限的按钮上只需要增加tg-permission属性即可。
1 | <button type="button" class="layui-btn" tg-permission="/demo/list:delete">标签</button> |
相比扩展HtmlHelper这种方式代码更少,也更贴近HTML的语法。