2010-12-13 32 views
0

Problème: Impossible d'obtenir les valeurs des constantes d'application à partir des constantes définies dans la configuration/application .rb (ou environment.rb) pour le plug-in d'autorisation (en application rails3)rails3: Impossible d'obtenir les valeurs des constantes d'application à partir des constantes définies dans le fichier config/application.rb

description: J'ai défini les constantes suivantes dans la application.rb qui sont nécessaires pour le plugin d'autorisation (utilisé pour le contrôle d'accès) de AUTHORIZATION_MIXIN = " rôles d'objet " LOGIN_REQUIRED_REDIRECTION = {: controller => '/ homes',: action => 'index'} PERMISSION_DENIED_REDIRECTION = {: co ntroller => '/ maisons',: action => 'nouvelles'} Ces constantes ajoutées dans le application.rb de l'application de rails3 ne sont pas accessibles à l'intérieur du module d'autorisation

Répondre

1

En rails3: RIR (principal): 007 : 0> h = {a: 1, b: '2', c: 6} => {: a => 1,: b => "2",: c => 6} irb (principal): 008: 0> h.keys => [: a,: b,: c] irb (principal): 009: 0> h.clés.include? 'b' => false irb (principal): 010: 0> h.keys.include? : B => true

Solution: En tant que module d'extension de l'autorisation d' Object.constants.include? "LOGIN_REQUIRED_REDIRECTION" mais dans rails3 Object.constants retourne un tableau de symboles c'est à dire [: Object,: Module,: Class,: Noyau,: LOGIN_REQUIRED_REDIRECTION,: PERMISSION_DENIED_REDIRECTION, ...] alors qu'il retournait précédemment un tableau de chaînes .constants.include? "LOGIN_REQUIRED_REDIRECTION" renvoie false même si la constante est présente

Pour éviter cela et pour rendre les constantes de plugins d'autorisation compatibles avec rails3, nous devons ajouter les constantes d'application au fichier config/application.rb et changer la constante de la chaîne en symbole ie faire les changements suivants dans les rails-autorisation-plugin/lib/authorization.rb

Modifiez sinon ObjectConstants.include? "LOGIN_REQUIRED_REDIRECTION" à sinon ObjectConstants.include? : LOGIN_REQUIRED_REDIRECTION

Modifiez sinon ObjectConstants.include? "PERMISSION_DENIED_REDIRECTION" à sinon ObjectConstants.include? : PERMISSION_DENIED_REDIRECTION

Modifiez sinon ObjectConstants.include? "STORE_LOCATION_METHOD" à sinon ObjectConstants.include? : STORE_LOCATION_METHOD