4

私はasp.netmvcプロジェクトを持っており、永続性はリポジトリによって処理されます。フォーム認証が使用されます。次に、承認を実装する必要があります。たとえば、マネージャーユーザーが自分のタスクのみを開き、ワーカーをタスクに割り当てることができるようにする必要があります。ワーカーには、自分に割り当てられているタスクのみが表示されます。スーパーモデレーターはすべてを編集できます。アクセス許可を定義できる、すぐに使用できるフレームワークはありますか?

私はAyendeRhinoSecurityを評価中です。より多くのサンプルコードをどこで入手できますか?Rhino Securityについてどう思いますか?
私のプロジェクトはLinqtoSQLを使用しており、NHibernateを使用していません。Rhino SecurityはNHibernateなしで機能しますか?

4

3 に答える 3

5

恐れ入りますが、RhinoSecurityはNhibernateに依存しています。
私はRhinoSecurityを数か月間評価してきましたが、最終的には、本当に優れた製品であるため、RhinoSecurityを使用することにしました。Ayendeのブログまたはここで
役立つ情報を見つけることができます。(Castle Windsorの代わりに)StructureMapと統合するために少し苦労しました。ここでいくつかの情報を見つけることができます。 達成しようとしていることを実行するには、IEntityInformationExtractorインターフェースを実装するクラスを定義する必要があります。

まず、次の参照を追加する必要があります(RhinoSecurityをNH3.0で再コンパイルしました)。

  • 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)を作成しました。これにより、タスクエンティティの権限を定義できます。これでアプリの準備が整いました。構造マップを「ブートストラップ」する必要があります。

  • Bootstrapper.Initialize();

これは、アプリの起動時に行います。これで、Rhinoセキュリティリポジトリとサービスを使用して、ユーザー、グループ、リレーションなどを作成できます。これは、私が提案したリンクです。私が用意したサンプルはここにあります

于 2011-01-28T08:39:30.583 に答える
1

asp.netmvc属性はそのようなタスクに適していると思います。

まず、ロールのリストを作成し、それをユーザーと参照する必要があります。ログイン後にセッションにユーザーロールを保存する必要があるより。この属性でコントローラーまたはアクションをマークするより。属性では、何らかのアクションを実行する必要があるロールを渡す必要があります。属性の実装では、ユーザーが何らかの役割を持っているかどうかを確認してから何もする必要はありません。そうでない場合は、許可されていないページにリダイレクトします。または、カスタム例外をスローして、global.asaxにリダイレクトします。

コード例については、この記事を確認してください。

于 2011-01-28T09:00:41.750 に答える
1

こちらもチェックしてください。使いやすいです。

http://code.google.com/p/saf-framework/

于 2011-06-02T00:38:32.793 に答える