Umbraco 13:如何判断当前会员是否属于指定会员组?
在Umbraco 13中判断当前会员是否属于特定会员组
你没看错,Umbraco 13的Member实体确实没有内置的IsInRole方法,官方将会员组的查询逻辑集中放在了IMemberService中。
如果你想在模板里实现这个判断,有两种常用的便捷方式:
直接在模板中调用IMemberService
先注入服务,再通过会员ID获取所有组并判断:@inject IMemberService MemberService @{ var currentMember = Members.GetCurrentMember(); if (currentMember != null) { var memberGroups = MemberService.GetAllRoles(currentMember.Id); var isInTargetGroup = memberGroups.Contains("myGroup"); if (isInTargetGroup) { <!-- 这里放置仅对目标会员组展示的内容 --> } } }扩展Member类添加自定义IsInRole方法
先在项目中创建一个扩展类,封装判断逻辑:using Umbraco.Cms.Core.Models.Membership; using Umbraco.Cms.Core.Services; public static class MemberExtensions { public static bool IsInRole(this IMember member, string groupName, IMemberService memberService) { if (member == null || string.IsNullOrWhiteSpace(groupName)) return false; var groups = memberService.GetAllRoles(member.Id); return groups.Contains(groupName); } }之后在模板里就能像你最初期望的那样简洁调用:
@inject IMemberService MemberService @{ var currentMember = Members.GetCurrentMember(); if (currentMember?.IsInRole("myGroup", MemberService) == true) { <!-- 这里放置仅对目标会员组展示的内容 --> } }
如果项目更偏向分层设计,也可以把这个判断逻辑放在视图组件(ViewComponent)中,在组件里注入IMemberService完成校验后,再渲染对应的内容视图,这样模板会更干净。
内容的提问来源于stack exchange,提问作者jessiebot
相关产品推荐
相关产品推荐

