admin_data 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +10 -0
- data/app/controllers/admin_data/base_controller.rb +9 -16
- data/app/controllers/admin_data/feed_controller.rb +1 -1
- data/app/controllers/admin_data/main_controller.rb +4 -8
- data/app/controllers/admin_data/search_controller.rb +1 -1
- data/app/views/admin_data/main/new.html.erb +3 -1
- data/app/views/admin_data/search/search/_errors.html.erb +3 -3
- data/app/views/admin_data/search/search/_listing.html.erb +0 -1
- data/lib/admin_data/chelper.rb +2 -2
- data/lib/admin_data/railtie.rb +2 -3
- data/lib/admin_data/settings.rb +2 -2
- data/lib/admin_data/version.rb +1 -1
- data/lib/admin_data.rb +2 -0
- data/test/functional/main_controller_authorization_test.rb +96 -0
- data/test/functional/main_controller_test.rb +0 -2
- data/test/rails_root/db/test.sqlite3 +0 -0
- data/test/rails_root/log/test.log +2289 -0
- metadata +7 -25
- data/app/controllers/admin_data/diagnostic_controller.rb +0 -28
- data/app/controllers/admin_data/validate_model_controller.rb +0 -106
- data/app/views/admin_data/diagnostic/index.html.erb +0 -17
- data/app/views/admin_data/diagnostic/missing_index.html.erb +0 -26
- data/app/views/admin_data/validate_model/_bad.html.erb +0 -1
- data/app/views/admin_data/validate_model/tid.html.erb +0 -2
- data/app/views/admin_data/validate_model/validate.html.erb +0 -67
- data/lib/css/vendor/images/ui-bg_diagonals-thick_75_f3d8d8_40x40.png +0 -0
- data/lib/css/vendor/images/ui-bg_dots-small_65_a6a6a6_2x2.png +0 -0
- data/lib/css/vendor/images/ui-bg_flat_0_333333_40x100.png +0 -0
- data/lib/css/vendor/images/ui-bg_flat_65_ffffff_40x100.png +0 -0
- data/lib/css/vendor/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/lib/css/vendor/images/ui-bg_glass_55_fbf8ee_1x400.png +0 -0
- data/lib/css/vendor/images/ui-bg_highlight-hard_100_eeeeee_1x100.png +0 -0
- data/lib/css/vendor/images/ui-bg_highlight-hard_100_f6f6f6_1x100.png +0 -0
- data/lib/css/vendor/images/ui-bg_highlight-soft_15_cc0000_1x100.png +0 -0
- data/lib/css/vendor/images/ui-icons_004276_256x240.png +0 -0
- data/lib/css/vendor/images/ui-icons_cc0000_256x240.png +0 -0
- data/lib/css/vendor/images/ui-icons_ffffff_256x240.png +0 -0
- data/lib/css/vendor/qunit.css +0 -119
- data/lib/tasks/admin_data_tasks.rake +0 -7
- data/lib/tasks/validate_models_bg.rake +0 -23
data/History.txt
CHANGED
@@ -8,10 +8,9 @@ class AdminData::BaseController < ApplicationController
|
|
8
8
|
|
9
9
|
include AdminData::Chelper
|
10
10
|
|
11
|
-
before_filter :
|
11
|
+
before_filter :build_klasses, :build_drop_down_for_klasses, :check_page_parameter, :prepare_drop_down_klasses
|
12
12
|
|
13
|
-
attr_reader :klass
|
14
|
-
attr_reader :model
|
13
|
+
attr_reader :klass, :model
|
15
14
|
|
16
15
|
private
|
17
16
|
|
@@ -24,8 +23,8 @@ class AdminData::BaseController < ApplicationController
|
|
24
23
|
render :text => '<h2>not authorized</h2>', :status => :unauthorized unless admin_data_is_allowed_to_view?
|
25
24
|
end
|
26
25
|
|
27
|
-
def
|
28
|
-
render :text => 'not authorized', :status => :unauthorized unless
|
26
|
+
def ensure_is_allowed_to_view_klass
|
27
|
+
render :text => 'not authorized', :status => :unauthorized unless admin_data_is_allowed_to_view_klass?
|
29
28
|
end
|
30
29
|
|
31
30
|
def ensure_is_allowed_to_update
|
@@ -58,20 +57,18 @@ class AdminData::BaseController < ApplicationController
|
|
58
57
|
model_names = Dir.chdir(model_dir) { Dir["**/*.rb"] }
|
59
58
|
klasses = get_klass_names(model_names)
|
60
59
|
filtered_klasses = remove_klasses_without_table(klasses).sort_by {|r| r.name.underscore}
|
61
|
-
klasses_with_security_clearance = filtered_klasses.select do |klass_local|
|
60
|
+
klasses_with_security_clearance = filtered_klasses.compact.select do |klass_local|
|
62
61
|
@klass = klass_local
|
63
|
-
|
62
|
+
admin_data_is_allowed_to_view_klass?
|
64
63
|
end
|
65
64
|
#TODO remove global constant. it is not thread safe
|
66
65
|
$admin_data_klasses = klasses_with_security_clearance
|
67
|
-
puts $admin_data_klasses.inspect
|
68
66
|
end
|
69
67
|
@klasses = $admin_data_klasses
|
70
68
|
end
|
71
69
|
|
72
70
|
def remove_klasses_without_table(klasses)
|
73
|
-
klasses.select { |k| k.ancestors.include?(ActiveRecord::Base) &&
|
74
|
-
k.connection.table_exists?(k.table_name) }
|
71
|
+
klasses.select { |k| k.ancestors.include?(ActiveRecord::Base) && k.connection.table_exists?(k.table_name) }
|
75
72
|
end
|
76
73
|
|
77
74
|
def get_klass_names(model_names)
|
@@ -98,7 +95,8 @@ class AdminData::BaseController < ApplicationController
|
|
98
95
|
end
|
99
96
|
|
100
97
|
def check_page_parameter
|
101
|
-
# Got hoptoad error because of url like
|
98
|
+
# Got hoptoad error because of url like
|
99
|
+
# http://localhost:3000/admin_data/User/advance_search?page=http://201.134.249.164/intranet/on.txt?
|
102
100
|
if params[:page].blank? || (params[:page] =~ /\A\d+\z/)
|
103
101
|
# proceed
|
104
102
|
else
|
@@ -106,9 +104,4 @@ class AdminData::BaseController < ApplicationController
|
|
106
104
|
end
|
107
105
|
end
|
108
106
|
|
109
|
-
def rails3_hack
|
110
|
-
#require_dependency File.join(Rails.root, 'vendor', 'plugins', 'admin_data', 'lib', 'admin_data', 'settings.rb')
|
111
|
-
#AdminData::Config.initialize_defaults
|
112
|
-
end
|
113
|
-
|
114
107
|
end
|
@@ -5,7 +5,7 @@ class AdminData::FeedController < AdminData::BaseController
|
|
5
5
|
before_filter :ensure_is_allowed_to_view_feed
|
6
6
|
|
7
7
|
def index
|
8
|
-
render :text => "
|
8
|
+
render :text => "Usage: http://localhost:3000/admin_data/feed/<model name>" and return if params[:klasss].blank?
|
9
9
|
|
10
10
|
begin
|
11
11
|
@klass = AdminData::Util.camelize_constantize(params[:klasss])
|
@@ -8,7 +8,7 @@ class AdminData::MainController < AdminData::BaseController
|
|
8
8
|
|
9
9
|
before_filter :get_model_and_verify_it, :only => [:destroy, :del, :edit, :update, :show]
|
10
10
|
|
11
|
-
before_filter :
|
11
|
+
before_filter :ensure_is_allowed_to_view_klass, :except => [:all_models, :index]
|
12
12
|
|
13
13
|
before_filter :ensure_is_allowed_to_update, :only => [:destroy, :del, :edit, :update, :create]
|
14
14
|
|
@@ -110,13 +110,9 @@ class AdminData::MainController < AdminData::BaseController
|
|
110
110
|
conditional_id = params[:id] =~ /^(\d+)-.*/ ? params[:id].to_i : params[:id]
|
111
111
|
condition = {primary_key => conditional_id}
|
112
112
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
if find_conditions.has_key?(:conditions)
|
118
|
-
condition = find_conditions.fetch(:conditions)
|
119
|
-
end
|
113
|
+
_proc = AdminData::Config.setting[:find_conditions] ? AdminData::Config.setting[:find_conditions][@klass.name] : nil
|
114
|
+
if _proc && find_conditions = _proc.call(params)
|
115
|
+
condition = find_conditions.fetch(:conditions) if find_conditions.has_key?(:conditions)
|
120
116
|
end
|
121
117
|
|
122
118
|
@model = @klass.send('find', :first, :conditions => condition)
|
@@ -8,7 +8,7 @@ class AdminData::SearchController < AdminData::BaseController
|
|
8
8
|
|
9
9
|
before_filter :get_class_from_params
|
10
10
|
before_filter :ensure_is_allowed_to_view
|
11
|
-
before_filter :
|
11
|
+
before_filter :ensure_is_allowed_to_view_klass
|
12
12
|
before_filter :ensure_valid_children_klass, :only => [:quick_search]
|
13
13
|
before_filter :ensure_is_authorized_for_update_opration, :only => [:advance_search]
|
14
14
|
before_filter :set_collection_of_columns, :only => [:advance_search]
|
@@ -13,7 +13,9 @@
|
|
13
13
|
<div class="content rounded">
|
14
14
|
<div class="inner umbrella">
|
15
15
|
<h1>Create a new record</h1>
|
16
|
-
<%= form_for @model,
|
16
|
+
<%= form_for @model, :as => @klass.name.underscore.to_sym,
|
17
|
+
:url => admin_data_on_k_index_path(:klass => @klass.name),
|
18
|
+
:html => {:class => 'form', :method => :post} do |f| %>
|
17
19
|
<%= render 'admin_data/shared/flash_message', :model => @model %>
|
18
20
|
<%= render 'admin_data/main/misc/form', :klass => @klass, :f => f %>
|
19
21
|
<% end %>
|
data/lib/admin_data/chelper.rb
CHANGED
@@ -9,9 +9,9 @@ module AdminData::Chelper
|
|
9
9
|
AdminData::Config.setting[:is_allowed_to_view].call(self)
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
12
|
+
def admin_data_is_allowed_to_view_klass?
|
13
13
|
return true if Rails.env.development?
|
14
|
-
AdminData::Config.setting[:
|
14
|
+
AdminData::Config.setting[:is_allowed_to_view_klass].call(self)
|
15
15
|
end
|
16
16
|
|
17
17
|
def admin_data_is_allowed_to_update?
|
data/lib/admin_data/railtie.rb
CHANGED
data/lib/admin_data/settings.rb
CHANGED
@@ -12,7 +12,7 @@ class AdminData::Config
|
|
12
12
|
is_allowed_to_view_feed
|
13
13
|
feed_authentication_user_id
|
14
14
|
feed_authentication_password
|
15
|
-
|
15
|
+
is_allowed_to_view_klass
|
16
16
|
is_allowed_to_update
|
17
17
|
is_allowed_to_update_model
|
18
18
|
column_settings
|
@@ -49,7 +49,7 @@ class AdminData::Config
|
|
49
49
|
|
50
50
|
:is_allowed_to_update => lambda {|controller| return true if Rails.env.development? },
|
51
51
|
|
52
|
-
:
|
52
|
+
:is_allowed_to_view_klass => lambda {|controller| return true },
|
53
53
|
|
54
54
|
:is_allowed_to_update_model => lambda {|controller| return true },
|
55
55
|
|
data/lib/admin_data/version.rb
CHANGED
data/lib/admin_data.rb
CHANGED
@@ -23,7 +23,9 @@ else
|
|
23
23
|
raise "Please see documentation at http://neerajdotname.github.com/admin_data to find out how to use this plugin with rails 2.3"
|
24
24
|
end
|
25
25
|
|
26
|
+
# move date_validation to inside admin_data
|
26
27
|
require 'admin_data_date_validation'
|
28
|
+
|
27
29
|
require 'admin_data/helpers'
|
28
30
|
require 'admin_data/chelper'
|
29
31
|
require 'admin_data/compatibility'
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
pwd = File.dirname(__FILE__)
|
4
|
+
f = File.join(pwd, '..', '..', 'app', 'views')
|
5
|
+
AdminData::MainController.prepend_view_path(f)
|
6
|
+
|
7
|
+
class AdminData::MainControllerAuthorizationTest < ActionController::TestCase
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@controller = AdminData::MainController.new
|
11
|
+
@request = ActionController::TestRequest.new
|
12
|
+
@response = ActionController::TestResponse.new
|
13
|
+
@article = Factory(:article)
|
14
|
+
@car = Factory(:car, :year => 2000, :brand => 'bmw')
|
15
|
+
grant_read_only_access
|
16
|
+
grant_update_access
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'is not allowed to view' do
|
20
|
+
setup do
|
21
|
+
revoke_read_only_access
|
22
|
+
get :table_structure, {:klass => Article.name.underscore}
|
23
|
+
end
|
24
|
+
should_respond_with(401)
|
25
|
+
should 'have text index' do
|
26
|
+
assert_tag(:content => 'not authorized')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'is allowed to view klass' do
|
31
|
+
context 'negative case' do
|
32
|
+
setup do
|
33
|
+
AdminData::Config.set = {
|
34
|
+
:is_allowed_to_view_klass => lambda {|controller| controller.instance_variable_get('@klass').name != 'Article' }
|
35
|
+
}
|
36
|
+
get :show, {:id => @article.id, :klass => Article.name.underscore }
|
37
|
+
end
|
38
|
+
should_respond_with(401)
|
39
|
+
should 'have text index' do
|
40
|
+
assert_tag(:content => 'not authorized')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
context 'positive case' do
|
44
|
+
setup do
|
45
|
+
AdminData::Config.set = {
|
46
|
+
:is_allowed_to_view_klass => lambda {|controller| controller.instance_variable_get('@klass').name == 'Article' }
|
47
|
+
}
|
48
|
+
get :show, {:id => @article.id, :klass => Article.name.underscore }
|
49
|
+
end
|
50
|
+
should_respond_with :success
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'is allowed to update' do
|
55
|
+
context 'for edit' do
|
56
|
+
setup do
|
57
|
+
AdminData::Config.set = { :is_allowed_to_update => lambda {|controller| false } }
|
58
|
+
get :edit, {:id => @article.id, :klass => @article.class.name, :attr => 'title', :data => 'Hello World' }
|
59
|
+
end
|
60
|
+
should_respond_with(401)
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'for destroy' do
|
64
|
+
setup do
|
65
|
+
AdminData::Config.set = { :is_allowed_to_update => lambda {|controller| false } }
|
66
|
+
delete :destroy, {:id => @article.id, :klass => @article.class.name.underscore}
|
67
|
+
end
|
68
|
+
should_respond_with(401)
|
69
|
+
end
|
70
|
+
|
71
|
+
context 'for delete' do
|
72
|
+
setup do
|
73
|
+
AdminData::Config.set = { :is_allowed_to_update => lambda {|controller| false } }
|
74
|
+
delete :del, {:id => @article.id, :klass => @article.class.name.underscore }
|
75
|
+
end
|
76
|
+
should_respond_with(401)
|
77
|
+
end
|
78
|
+
|
79
|
+
context 'for update' do
|
80
|
+
setup do
|
81
|
+
AdminData::Config.set = { :is_allowed_to_update => lambda {|controller| false } }
|
82
|
+
post :update, { :klass => Article.name.underscore, :id => @article, :article => {:title => 'new title'}}
|
83
|
+
end
|
84
|
+
should_respond_with(401)
|
85
|
+
end
|
86
|
+
|
87
|
+
context 'for create' do
|
88
|
+
setup do
|
89
|
+
AdminData::Config.set = { :is_allowed_to_update => lambda {|controller| false } }
|
90
|
+
post :create, { :klass => Article.name.underscore, 'article' => {:title => 'hello', :body => 'hello world'}}
|
91
|
+
end
|
92
|
+
should_respond_with(401)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
Binary file
|