sql >> データベース >  >> NoSQL >> MongoDB

mongoidセッションを読み取り専用にする

    それは古い質問ですが、最近同じ問題に遭遇したので、共有することにしました。ただし、これはセッションごとのソリューションではなく、モデルごとのソリューションであることに注意してください。

    私が理解したように、それを可能にする2つの方法があります:

    1。 readonly?を再定義します

    Mongoidコードを見ると、保存、削除、または更新するすべての関数がreadonly?を呼び出していることがわかります。 モデルが読み取り専用かどうかを確認します。実際には文書化されておらず、欠点があります-作成して作成してください!このモデルでは許可されています(ただし、破棄、更新、保存は実行されません)。

    private
    
    def readonly?
      true
    end
    

    2。カスタムコールバック

    前のメソッドに加えて、コールバックを追加して、作成したものでもパススルーしないようにすることができます:

    before_create :readonly_secret
    
    private
    
    def readonly?
      true
    end
    
    def readonly_secret
      raise Mongoid::Errors::ReadonlyDocument, self.class if readonly?
    end
    

    基本的に、readonly?を取り除くことができます メソッドをまとめて、before_saveなどの他のコールバックを追加します 、before_destroybefore_updatebefore_create

    「読みやすさ」を操作する

    ランタイムコードから読み取り専用状態を操作する必要があると感じた場合は、モデルのクラスの属性を定義できます。

    before_create :readonly_secret
    
    class << self
      attr_accessor :readonly
    end
    
    private
    
    def readonly?
      self.class.readonly.nil? ? true : self.class.readonly
    end
    
    def readonly_secret
      raise Mongoid::Errors::ReadonlyDocument, self.class if readonly?
      true
    end
    



    1. Laravelフレームワークのmongodbでaggregateを実行する方法

    2. MongoDBをリモートで管理するためのヒント

    3. Mongodbテキストは複数のフィールドを検索します

    4. Swagger(C#の場合はSwashbuckle)は、MongoObjectIdを単一の文字列ではなく複数のフィールドとして表示します