rails3: невозможно получить значения констант приложения из констант, определенных в config / application.rb для плагина авторизации - PullRequest
0 голосов
/ 13 декабря 2010

Проблема: Невозможно получить значения констант приложения из констант, определенных в config / application.rb (или environment.rb) для плагина авторизации (в приложении rails3)

Описание: В application.rb я определил следующие константы, необходимые для плагина авторизации (используется для контроля доступа) AUTHORIZATION_MIXIN = "роли объектов" LOGIN_REQUIRED_REDIRECTION = {: controller => '/ homes',: action => 'index'} PERMISSION_DENIED_REDIRECTION = {: controller => '/ homes',: action => 'new'} Эти константы, добавленные в приложение rails3 application.rb, недоступны внутри плагина авторизации

1 Ответ

1 голос
/ 13 декабря 2010

В рельсах3: irb (основной): 007: 0> h = {a: 1, b: '2', c: 6} => {: a => 1,: b => "2",: c => 6} irb (основной): 008: 0> h.keys => [: a,: b,: c] irb (основной): 009: 0> h.keys.include?'b' => false irb (main): 010: 0> h.keys.include?: b => true

Решение: Как плагин авторизации проверяет Object.constants.include?«LOGIN_REQUIRED_REDIRECTION», но в rails3 Object.constants возвращает массив символов, т.е. [: Object,: Module,: Class,: Kernel,: LOGIN_REQUIRED_REDIRECTION,: PERMISSION_DENIED_REDIRECTION, ...], в то время как ранее он возвращал массив строк. Таким образом, Object.constants.включают?«LOGIN_REQUIRED_REDIRECTION» возвращает false, даже если константа присутствует

Чтобы избежать этого и сделать константы плагинов авторизации совместимыми с rails3, нам нужно добавить константы приложения в файл config / application.rb и изменить константу в строке насимвол, т.е. сделать следующие изменения в rails-authorization-plugin / lib / authorization.rb

Изменить, если не Object.constants.include?«LOGIN_REQUIRED_REDIRECTION», если не Object.constants.include?: LOGIN_REQUIRED_REDIRECTION

Изменить, если не Object.constants.include?"PERMISSION_DENIED_REDIRECTION", если не Object.constants.include?: PERMISSION_DENIED_REDIRECTION

Изменить, если не Object.constants.include?"STORE_LOCATION_METHOD", если не Object.constants.include?: STORE_LOCATION_METHOD

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...