MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Ustaw sesję mongoid tylko do odczytu

To stare pytanie, ale ostatnio spotkałem się z tym samym problemem, więc postanowiłem się podzielić. Chociaż chcę zauważyć, że nie jest to rozwiązanie na sesję, ale na model.

Jak się domyśliłem, są dwa sposoby, aby to umożliwić:

1. Przedefiniuj readonly?

Jeśli przejrzysz kod Mongoid, zobaczysz, że wszystkie funkcje, które zapisują, usuwają lub aktualizują, wywołują readonly? aby sprawdzić, czy model jest tylko do odczytu. Nie do końca udokumentowane i ma wadę – twórz i twórz! są dozwolone w tym modelu (niszczenia, aktualizacje, zapisy nie będą działać).

private

def readonly?
  true
end

2. Niestandardowe wywołanie zwrotne

Oprócz poprzedniej metody możesz dodać wywołania zwrotne, aby upewnić się, że nawet tworzone dzieła nie przejdą przez:

before_create :readonly_secret

private

def readonly?
  true
end

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

Zasadniczo możesz pozbyć się readonly? wszystkie metody i dodaj inne wywołania zwrotne, takie jak before_save , before_destroy , before_update , before_create

Manipuluj „gotowością”

jeśli czujesz potrzebę manipulowania stanem tylko do odczytu z kodu wykonawczego, możesz zdefiniować atrybut dla klasy modelu:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak ustawić mongod.conf bind_ip z wieloma adresami ip?

  2. Dokument podrzędny Mongoose przed usunięciem oprogramowania pośredniczącego, które nie jest wywoływane

  3. Jak utworzyć kanał plików od osób, które obserwuje użytkownik?

  4. jak używać mongoimport do importowania pliku json

  5. $allElementsTrue . MongoDB