加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何将存储库传递给ASP.NET MVC中的authorize属

发布时间:2020-12-16 07:42:57 所属栏目:asp.Net 来源:网络整理
导读:我是Castle Windsor,它适用于控制器构造函数传递正在使用的存储库. private IStoryRepository Repository;public StoryController(IStoryRepository Repository){ this.Repository = Repository; } 现在我在管理区域中有一个Action来显示主管理菜单.我使用了
我是Castle Windsor,它适用于控制器构造函数传递正在使用的存储库.

private IStoryRepository Repository;
public StoryController(IStoryRepository Repository)
{
    this.Repository = Repository;                   
}

现在我在管理区域中有一个Action来显示主管理菜单.我使用了自定义授权属性,只检查登录用户是否为admin(只是users表中的isAdmin标志)

[AdminAuthorize]
 public ActionResult Menu()

 private IStoryRepository Repository;
 /// <summary>
 /// Initializes a new instance of the <see cref="AdminAuthorizeAttribute"/> class.
 /// </summary>
 public AdminAuthorizeAttribute(IStoryRepository Repository)
 {
     this.Repository = Repository;
 }

 /// <summary>
 /// Checks if the user is authorised
 /// </summary>
 /// <param name="httpContext">The HTTP context.</param>
 /// <returns>
 ///    <c>true</c> if authorized; otherwise,<c>false</c>.
 /// </returns>
 protected override bool AuthorizeCore(HttpContextBase httpContext)
 {
    return this.Repository.UserIsAdmin(httpContext.User.Identity.Name);
 }

如何让Castle将存储库传递给属性构造函数,就像它对控制器构造函数一样?

解决方法

你基本上有两个选择.将过滤器包装在代理中,可以找到一个很好的例子 here.

或者,在自定义过滤器中,您可以执行显式容器调用.例如使用StructureMap(我没有广泛使用过的城堡)

ObjectFactory.GetInstance(IStoryRepository)

可能有第三种方法是扩展ActionInvoker以进行注射,但我不确定如何做到这一点.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读