sql >> Database >  >> NoSQL >> MongoDB

Mongoid-sessie alleen-lezen maken

Dat is een oude vraag, maar ik kwam onlangs hetzelfde probleem tegen, dus besloot ik het te delen. Hoewel ik wil opmerken dat dit geen oplossing per sessie is, maar per model.

Zoals ik ontdekte, zijn er twee manieren om het mogelijk te maken:

1. Herdefinieer readonly?

Als je door de Mongoid-code kijkt, zie je dat alle functies die opslaan, verwijderen of bijwerken, readonly? aanroepen. om te controleren of het model alleen-lezen is. Niet echt gedocumenteerd en heeft een nadeel -- creëren en creëren! zijn toegestaan ​​op dit model (vernietigen, bijwerken, opslaan wordt echter niet uitgevoerd).

private

def readonly?
  true
end

2. Een aangepaste callback

Naast de vorige methode kun je callback(s) toevoegen om ervoor te zorgen dat zelfs gemaakte creaties niet doorgaan:

before_create :readonly_secret

private

def readonly?
  true
end

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

In wezen kunt u zich ontdoen van readonly? methode samen, en voeg andere callbacks toe, zoals before_save , before_destroy , before_update , before_create

Manipuleer "readonliness"

als u de behoefte voelt om de alleen-lezen-status te manipuleren vanuit een runtime-code, kunt u een attribuut definiëren voor de klasse van uw model:

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-groep op dbref-veld

  2. Overzetten van SQLite naar Redis

  3. Hoe een innerlijke query in mongodb vanuit javascript door te geven

  4. PyMongo:Wat gebeurt er met de cursor wanneer no_cursor_timeout=True