sql >> Database teknologi >  >> NoSQL >> MongoDB

Gør mongoid-session skrivebeskyttet

Det er et gammelt spørgsmål, men jeg mødte det samme problem for nylig, så besluttede at dele det. Selvom jeg vil bemærke, at dette ikke er en per-session-løsning, men en per-model.

Som jeg fandt ud af, er der to måder at gøre det muligt på:

1. Omdefiner readonly?

Hvis du ser gennem Mongoid-koden, vil du se, at alle funktioner, der gemmer, sletter eller opdaterer, kalder readonly? for at kontrollere, om modellen er skrivebeskyttet. Ikke rigtig dokumenteret og har en ulempe - skab og skab! er tilladt på denne model (ødelægger, opdaterer, gemmer vil dog ikke køre).

private

def readonly?
  true
end

2. Et tilpasset tilbagekald

Ud over den tidligere metode kan du tilføje tilbagekald(er) for at sikre, at selv oprettelser ikke passerer igennem:

before_create :readonly_secret

private

def readonly?
  true
end

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

I bund og grund kan du slippe af med readonly? metode sammen, og tilføje andre tilbagekald såsom before_save , before_destroy , before_update , before_create

Manipuler "readonliness"

hvis du føler et behov for at manipulere skrivebeskyttet tilstand fra en runtime-kode, kan du definere en attribut for din models klasse:

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. MongoDB - manuelle referencer eksempel

  2. Hvordan udsteder jeg en runCommand med mongoDB C#-driveren?

  3. Redis vs. Memcached – 2021 Sammenligning

  4. Betinget $sum i MongoDB