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

asp.net-mvc-2 – 查找要在ASP.NET MVC项目上使用的授权框架

发布时间:2020-12-16 06:54:27 所属栏目:asp.Net 来源:网络整理
导读:我有一个asp.net mvc项目,持久性由存储库处理.使用表单身份验证.现在我需要实施授权.例如,我需要确保经理用户只能打开他/她的任务并将工作人员分配到任务中.工人只能看到分配给他/她的任务.超级版主可以编辑所有内容. 是否有任何可以使用的框架允许我定义权
我有一个asp.net mvc项目,持久性由存储库处理.使用表单身份验证.现在我需要实施授权.例如,我需要确保经理用户只能打开他/她的任务并将工作人员分配到任务中.工人只能看到分配给他/她的任务.超级版主可以编辑所有内容.
是否有任何可以使用的框架允许我定义权限?

我正在评估Ayende Rhino Security.我在哪里可以获得更多示例代码?您对Rhino Security有何看法?
我的项目使用Linq to SQL并且没有使用NHibernate. Rhino Security可以在没有NHibernate的情况下工作吗?

解决方法

我担心,Rhino Security依赖Nhibernate来工作.
我一直在评估Rhino Security几个月,最后,我决定使用它,因为它是一个非常好的产品.
您可以在Ayende的 blog或 here上找到有用的信息.
我有点疏远将它与StructureMap(而不是Castle Windsor)集成.你可以找到一些信息 here.
要做你想要实现的目标,你必须定义一个实现IEntityInformationExtractor接口的类.

首先,您必须添加以下引用(我已经使用NH 3.0重新编译了Rhino Security):

> Microsoft.Practices.ServiceLocation
> NHibernate
> NHibernate.ByteCode.Castle
> StructureMap
> Rhino.Security
> StructureMapAdapter

然后定义一个引导程序:

public static class Bootstrapper
{
    public static void Initialize()
    {
        ObjectFactory.Initialize(cfg =>
        {
            cfg.UseDefaultStructureMapConfigFile = false;
            cfg.IgnoreStructureMapConfig = true;
            cfg.AddRegistry<StructureMapRegistry>();
        });
        ServiceLocator.SetLocatorProvider(() => new StructureMapServiceLocator(ObjectFactory.Container));
    }
}

然后定义StructureMap注册表类:

public class StructureMapRegistry : Registry
{
    public StructureMapRegistry()
    {
        string ConnDb = "Data Source=(local); Initial Catalog=RhinoSecurity_Test; Trusted_Connection=true;";

        For<ISessionFactory>()
            .Singleton()
            .TheDefault.Is.ConstructedBy(() => new NHSessionFactory(ConnDb,false).SessionFactory);
        For<ISession>()
            .Singleton()
            .TheDefault.Is.ConstructedBy(x => x.GetInstance<ISessionFactory>().OpenSession());
        For<IAuthorizationRepository>()
             .Use<AuthorizationRepository>();
        For<IPermissionsService>()
            .Use<PermissionsService>();
        For<IAuthorizationService>()
            .Use<AuthorizationService>();
        For<IPermissionsBuilderService>()
            .Use<PermissionsBuilderService>();
        For<IEntityInformationExtractor<Model.Task>>()
            .Use(p =>
                {
                return (new TaskInfromationExtractor(p.GetInstance<ISession>()));
                });
    }
}

NHSessionFactory基本上创建了一个NH会话工厂.

我创建了一个实现IEntityInformationExtractor的类(TaskInfromationExtractor).这将允许您为任务实体定义权限.
现在您的应用已经准备就绪你只需要“bootstrap”结构图:

> Bootstrapper.Initialize();

当你的应用程序启动时,你会这样做.
现在您可以使用Rhino安全存储库和服务来创建用户,组,关系等等,作为我给你建议的链接.
你可以找到我准备好的样品here

(编辑:李大同)

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

    推荐文章
      热点阅读