goldberg_generator 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/USAGE +34 -0
- data/goldberg_generator.rb +463 -0
- data/templates/README_GOLDBERG +22 -0
- data/templates/app/views/layouts/application.rhtml +80 -0
- data/templates/layouts/ewnf/README +8 -0
- data/templates/layouts/ewnf/app/views/layouts/application.rhtml +74 -0
- data/templates/layouts/ewnf/public/images/bg.gif +0 -0
- data/templates/layouts/ewnf/public/images/daddy_rightarrow.gif +0 -0
- data/templates/layouts/ewnf/public/images/sample.jpg +0 -0
- data/templates/layouts/ewnf/public/images/title_img.jpg +0 -0
- data/templates/layouts/ewnf/public/stylesheets/layout.css +223 -0
- data/templates/layouts/snooker/app/views/layouts/application.rhtml +74 -0
- data/templates/layouts/snooker/public/images/column_200.png +0 -0
- data/templates/layouts/snooker/public/images/daddy_rightarrow.gif +0 -0
- data/templates/layouts/snooker/public/images/footer_bg.png +0 -0
- data/templates/layouts/snooker/public/images/logo.jpg +0 -0
- data/templates/layouts/snooker/public/stylesheets/layout.css +183 -0
- data/templates/layouts/spoiled_brat/LICENSE.txt +211 -0
- data/templates/layouts/spoiled_brat/README +8 -0
- data/templates/layouts/spoiled_brat/app/views/layouts/application.rhtml +71 -0
- data/templates/layouts/spoiled_brat/public/images/blockquote-bg.gif +0 -0
- data/templates/layouts/spoiled_brat/public/images/body-bg.jpg +0 -0
- data/templates/layouts/spoiled_brat/public/images/centerColumn-bg.jpg +0 -0
- data/templates/layouts/spoiled_brat/public/images/daddy_leftarrow.gif +0 -0
- data/templates/layouts/spoiled_brat/public/images/h2-bg.gif +0 -0
- data/templates/layouts/spoiled_brat/public/images/h3-bg.gif +0 -0
- data/templates/layouts/spoiled_brat/public/images/header-bg.jpg +0 -0
- data/templates/layouts/spoiled_brat/public/images/hr-bg.jpg +0 -0
- data/templates/layouts/spoiled_brat/public/images/logo.jpg +0 -0
- data/templates/layouts/spoiled_brat/public/stylesheets/layout.css +379 -0
- data/templates/public/goldberg/images/action.png +0 -0
- data/templates/public/goldberg/images/add.png +0 -0
- data/templates/public/goldberg/images/bodybg.jpg +0 -0
- data/templates/public/goldberg/images/delete.png +0 -0
- data/templates/public/goldberg/images/down.png +0 -0
- data/templates/public/goldberg/images/footerbg.jpg +0 -0
- data/templates/public/goldberg/images/logo_right.jpg +0 -0
- data/templates/public/goldberg/images/menuhover.jpg +0 -0
- data/templates/public/goldberg/images/page.png +0 -0
- data/templates/public/goldberg/images/permission.png +0 -0
- data/templates/public/goldberg/images/role.png +0 -0
- data/templates/public/goldberg/images/up.png +0 -0
- data/templates/public/goldberg/javascripts/suckerfish.js +12 -0
- data/templates/public/goldberg/stylesheets/goldberg.css +142 -0
- data/templates/public/goldberg/stylesheets/layout.css +321 -0
- data/templates/public/goldberg/stylesheets/suckerfish.css +124 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/auth_controller.rb +104 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/content_pages_controller.rb +197 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/controller_actions_controller.rb +134 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/menu_items_controller.rb +184 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/permissions_controller.rb +60 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/roles_controller.rb +85 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/roles_permissions_controller.rb +65 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/site_controllers_controller.rb +157 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/system_settings_controller.rb +75 -0
- data/templates/vendor/plugins/goldberg/app/controllers/goldberg/users_controller.rb +293 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/auth_helper.rb +4 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/content_pages_helper.rb +23 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/controller_actions_helper.rb +5 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/menu_items_helper.rb +4 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/permissions_helper.rb +4 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/roles_helper.rb +4 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/roles_permissions_helper.rb +4 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/site_controllers_helper.rb +4 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/system_settings_helper.rb +4 -0
- data/templates/vendor/plugins/goldberg/app/helpers/goldberg/users_helper.rb +4 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/content_page.rb +134 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/controller_action.rb +86 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/credentials.rb +128 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/menu.rb +198 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/menu_item.rb +127 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/permission.rb +37 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/role.rb +68 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/roles_permission.rb +18 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/site_controller.rb +59 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/system_settings.rb +112 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/user.rb +69 -0
- data/templates/vendor/plugins/goldberg/app/models/goldberg/user_mailer.rb +43 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/auth/_login.rhtml +15 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/auth/login.rhtml +22 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/auth/logout.rhtml +2 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/_fck_create_folder.rxml +6 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/_fck_files.rxml +19 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/_form.rhtml +32 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/edit.rhtml +10 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/fck_speller_pages.rhtml +58 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/list.rhtml +22 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/new.rhtml +8 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/show.rhtml +57 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/view.rhtml +1 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/content_pages/view_default.rhtml +1 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/_form.rhtml +53 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/edit.rhtml +9 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/list.rhtml +27 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/new.rhtml +10 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/controller_actions/show.rhtml +13 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/layouts/_tabpanel_js.rhtml +52 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/layouts/_tabpanel_list.rhtml +7 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_breadcrumbs.rhtml +5 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_form.rhtml +42 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_item_list.rhtml +52 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_item_parent_list.rhtml +15 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_menubar.rhtml +21 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/_suckerfish.rhtml +14 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/edit.rhtml +10 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/list-original.rhtml +27 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/list.rhtml +16 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/new.rhtml +9 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/menu_items/show.rhtml +8 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/_form.rhtml +7 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/edit.rhtml +9 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/list.rhtml +14 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/new.rhtml +8 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/permissions/show.rhtml +38 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/_form.rhtml +18 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/edit.rhtml +9 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/list.rhtml +21 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/new.rhtml +8 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles/show.rhtml +79 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/_form.rhtml +13 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/edit.rhtml +9 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/list.rhtml +24 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/new.rhtml +8 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/new_permission_for_role.rhtml +8 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/roles_permissions/show.rhtml +8 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/_form.rhtml +15 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/_list.rhtml +26 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/edit.rhtml +9 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/list.rhtml +107 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/new.rhtml +8 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/site_controllers/show.rhtml +38 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/_form.rhtml +71 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/edit.rhtml +9 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/list.rhtml +27 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/new.rhtml +8 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/system_settings/show.rhtml +189 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/user_mailer/confirmation_request.rhtml +19 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/user_mailer/reset_password.rhtml +17 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/user_mailer/reset_password_request.rhtml +23 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/_form.rhtml +53 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/confirm_registration.rhtml +26 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/confirm_registration_submit.rhtml +4 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/create.rhtml +19 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/edit.rhtml +11 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/forgot_password.rhtml +27 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/forgot_password_submit.rhtml +4 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/list.rhtml +18 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/new.rhtml +19 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/reset_password.rhtml +11 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/reset_password_submit.rhtml +3 -0
- data/templates/vendor/plugins/goldberg/app/views/goldberg/users/show.rhtml +33 -0
- data/templates/vendor/plugins/goldberg/db/ContentPage.yml +466 -0
- data/templates/vendor/plugins/goldberg/db/ControllerAction.yml +162 -0
- data/templates/vendor/plugins/goldberg/db/MenuItem.yml +109 -0
- data/templates/vendor/plugins/goldberg/db/Permission.yml +21 -0
- data/templates/vendor/plugins/goldberg/db/Role.yml +493 -0
- data/templates/vendor/plugins/goldberg/db/RolesPermission.yml +26 -0
- data/templates/vendor/plugins/goldberg/db/SiteController.yml +61 -0
- data/templates/vendor/plugins/goldberg/db/SystemSettings.yml +21 -0
- data/templates/vendor/plugins/goldberg/db/User.yml +15 -0
- data/templates/vendor/plugins/goldberg/db/migrate/001_initial_setup.rb +128 -0
- data/templates/vendor/plugins/goldberg/db/migrate/002_menu_rest_items_users_cached_content_pages.rb +26 -0
- data/templates/vendor/plugins/goldberg/db/migrate/003_self_registration.rb +54 -0
- data/templates/vendor/plugins/goldberg/db/migrate/004_column_fixes.rb +119 -0
- data/templates/vendor/plugins/goldberg/init.rb +13 -0
- data/templates/vendor/plugins/goldberg/lib/goldberg.rb +37 -0
- data/templates/vendor/plugins/goldberg/lib/goldberg/controller.rb +11 -0
- data/templates/vendor/plugins/goldberg/lib/goldberg/filters.rb +197 -0
- data/templates/vendor/plugins/goldberg/lib/goldberg/helper.rb +66 -0
- data/templates/vendor/plugins/goldberg/lib/goldberg/migration.rb +113 -0
- data/templates/vendor/plugins/goldberg/lib/goldberg/migrator.rb +128 -0
- data/templates/vendor/plugins/goldberg/lib/goldberg/model.rb +110 -0
- data/templates/vendor/plugins/goldberg/lib/goldberg/routes.rb +49 -0
- data/templates/vendor/plugins/goldberg/lib/goldberg/test_helper.rb +82 -0
- data/templates/vendor/plugins/goldberg/tasks/goldberg_tasks.rake +47 -0
- data/templates/vendor/plugins/goldberg/test/functional/content_pages_controller_test.rb +31 -0
- data/templates/vendor/plugins/goldberg/test/integration/security_test.rb +134 -0
- data/templates/vendor/plugins/goldberg/test/test_helper.rb +40 -0
- data/templates/vendor/plugins/goldberg/test/unit/content_page_test.rb +87 -0
- data/templates/vendor/plugins/goldberg/test/unit/controller_action_test.rb +85 -0
- data/templates/vendor/plugins/goldberg/test/unit/menu_item_test.rb +46 -0
- data/templates/vendor/plugins/goldberg/test/unit/permission_test.rb +35 -0
- data/templates/vendor/plugins/goldberg/test/unit/site_controller_test.rb +53 -0
- data/templates/vendor/plugins/goldberg/test/unit/system_settings_test.rb +71 -0
- data/templates/vendor/plugins/goldberg/test/unit/user_test.rb +104 -0
- metadata +310 -0
@@ -0,0 +1,127 @@
|
|
1
|
+
module Goldberg
|
2
|
+
class MenuItem < ActiveRecord::Base
|
3
|
+
include Goldberg::Model
|
4
|
+
|
5
|
+
validates_presence_of :name, :label
|
6
|
+
validates_uniqueness_of :name
|
7
|
+
|
8
|
+
attr_accessor :controller_action, :content_page
|
9
|
+
|
10
|
+
def above
|
11
|
+
if self.parent_id
|
12
|
+
conditions =
|
13
|
+
["parent_id = ? and seq = ?", self.parent_id, self.seq - 1]
|
14
|
+
else
|
15
|
+
conditions =
|
16
|
+
["parent_id is null and seq = ?", self.seq - 1]
|
17
|
+
end
|
18
|
+
|
19
|
+
return MenuItem.find(:first,
|
20
|
+
:conditions => conditions)
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
def below
|
25
|
+
if self.parent_id
|
26
|
+
conditions =
|
27
|
+
["parent_id = ? and seq = ?", self.parent_id, self.seq + 1]
|
28
|
+
else
|
29
|
+
conditions =
|
30
|
+
["parent_id is null and seq = ?", self.seq + 1]
|
31
|
+
end
|
32
|
+
|
33
|
+
return MenuItem.find(:first,
|
34
|
+
:conditions => conditions)
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
def MenuItem.repack(repack_id)
|
39
|
+
if repack_id
|
40
|
+
items = MenuItem.find(:all,
|
41
|
+
:conditions => "parent_id = #{repack_id}",
|
42
|
+
:order => 'seq')
|
43
|
+
else
|
44
|
+
items = MenuItem.find(:all,
|
45
|
+
:conditions => "parent_id is null",
|
46
|
+
:order => 'seq')
|
47
|
+
end
|
48
|
+
|
49
|
+
seq = 1
|
50
|
+
for item in items do
|
51
|
+
item.seq = seq
|
52
|
+
item.save!
|
53
|
+
seq += 1
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
def MenuItem.next_seq(parent_id)
|
59
|
+
if parent_id and parent_id.to_i > 0
|
60
|
+
next_seq = MenuItem.find_by_sql("select coalesce(max(seq) + 1, 1) as seq from #{prefix}menu_items where parent_id = #{parent_id}")
|
61
|
+
else
|
62
|
+
next_seq = MenuItem.find_by_sql("select coalesce(max(seq) + 1, 1) as seq from #{prefix}menu_items where parent_id is null")
|
63
|
+
end
|
64
|
+
|
65
|
+
if next_seq
|
66
|
+
return next_seq[0].seq
|
67
|
+
else
|
68
|
+
return 1
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
def MenuItem.items_for_permissions(permission_ids = nil)
|
74
|
+
# Hash for faster & easier lookups
|
75
|
+
if permission_ids
|
76
|
+
perms = {}
|
77
|
+
for id in permission_ids do
|
78
|
+
perms[id] = true
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# List of items to return
|
83
|
+
items = []
|
84
|
+
|
85
|
+
menu_items = self.find(:all,
|
86
|
+
:order => 'parent_id, seq, id')
|
87
|
+
for item in menu_items do
|
88
|
+
if item.controller_action_id.to_i > 0
|
89
|
+
item.controller_action =
|
90
|
+
ControllerAction.find(item.controller_action_id)
|
91
|
+
if perms
|
92
|
+
if perms.has_key?(item.controller_action.effective_permission.id)
|
93
|
+
items << item
|
94
|
+
end
|
95
|
+
else
|
96
|
+
items << item
|
97
|
+
end
|
98
|
+
elsif item.content_page_id.to_i > 0
|
99
|
+
item.content_page =
|
100
|
+
ContentPage.find(item.content_page_id)
|
101
|
+
if perms
|
102
|
+
if perms.has_key?(item.content_page.permission_id)
|
103
|
+
items << item
|
104
|
+
end
|
105
|
+
else
|
106
|
+
items << item
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
return items
|
112
|
+
end
|
113
|
+
|
114
|
+
|
115
|
+
protected
|
116
|
+
|
117
|
+
|
118
|
+
def validate
|
119
|
+
unless self.content_page_id.to_i != 0 || controller_action_id.to_i != 0
|
120
|
+
errors.add(:content_page_id, 'A menu item must be attached to either a content page or a controller / action')
|
121
|
+
errors.add(:controller_action_id, 'A menu item must be attached to either a content page or a controller / action')
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Goldberg
|
2
|
+
class Permission < ActiveRecord::Base
|
3
|
+
include Goldberg::Model
|
4
|
+
|
5
|
+
has_many :content_pages
|
6
|
+
has_many :site_controllers
|
7
|
+
has_many :controller_actions
|
8
|
+
|
9
|
+
validates_presence_of :name
|
10
|
+
validates_uniqueness_of :name
|
11
|
+
|
12
|
+
class << self
|
13
|
+
# Find Permissions for a Role ID or an array of Role IDs.
|
14
|
+
def find_for_role(role_ids)
|
15
|
+
return find_by_sql( ["select p.* from #{prefix}permissions p inner join #{prefix}roles_permissions rp on p.id = rp.permission_id where role_id in (?) order by p.name", role_ids] )
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
# Find all Permissions for a Role. This method gets the hierarchy
|
20
|
+
# for the given Role and uses that to get all the Permissions for
|
21
|
+
# the Role and its ancestors.
|
22
|
+
def find_all_for_role(role)
|
23
|
+
roles = role.get_parents
|
24
|
+
roles << role
|
25
|
+
return find_for_role(roles.collect(&:id))
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
# Find Permissions that are not already associated with the given
|
30
|
+
# Role ID.
|
31
|
+
def find_not_for_role(role_id)
|
32
|
+
return find_by_sql( ["select p.* from #{prefix}permissions p where id not in (select permission_id from #{prefix}roles_permissions rp where role_id in (?)) order by name", role_id] )
|
33
|
+
end
|
34
|
+
|
35
|
+
end # class << self
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require "goldberg/credentials"
|
2
|
+
require "goldberg/menu"
|
3
|
+
|
4
|
+
module Goldberg
|
5
|
+
class Role < ActiveRecord::Base
|
6
|
+
include Goldberg::Model
|
7
|
+
|
8
|
+
has_many :users
|
9
|
+
|
10
|
+
validates_presence_of :name
|
11
|
+
validates_uniqueness_of :name
|
12
|
+
|
13
|
+
serialize :cache
|
14
|
+
|
15
|
+
class << self
|
16
|
+
def Role.rebuild_cache
|
17
|
+
roles = Role.find(:all)
|
18
|
+
|
19
|
+
for role in roles do
|
20
|
+
role.cache = nil ; role.save # we have to do this to clear it
|
21
|
+
|
22
|
+
role.cache = Hash.new
|
23
|
+
role.rebuild_credentials
|
24
|
+
role.rebuild_menu
|
25
|
+
role.save
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end # class << self
|
29
|
+
|
30
|
+
def rebuild_credentials
|
31
|
+
self.cache[:credentials] = Credentials.new(self.id)
|
32
|
+
end
|
33
|
+
|
34
|
+
def rebuild_menu
|
35
|
+
menu = Menu.new(self)
|
36
|
+
self.cache[:menu] = menu
|
37
|
+
end
|
38
|
+
|
39
|
+
def get_parents
|
40
|
+
parents = Array.new
|
41
|
+
seen = Hash.new
|
42
|
+
|
43
|
+
current = self.id
|
44
|
+
|
45
|
+
while current
|
46
|
+
role = Role.find(current)
|
47
|
+
if role
|
48
|
+
if not seen.has_key?(role.id)
|
49
|
+
parents << role
|
50
|
+
seen[role.id] = true
|
51
|
+
current = role.parent_id
|
52
|
+
else
|
53
|
+
current = nil
|
54
|
+
end
|
55
|
+
else
|
56
|
+
current = nil
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
return parents
|
61
|
+
end
|
62
|
+
|
63
|
+
def get_start_path
|
64
|
+
self.start_path || Goldberg.settings.get_start_path
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Goldberg
|
2
|
+
class RolesPermission < ActiveRecord::Base
|
3
|
+
include Goldberg::Model
|
4
|
+
|
5
|
+
validates_presence_of :role_id, :permission_id
|
6
|
+
|
7
|
+
def RolesPermission.find_for_role(role_ids)
|
8
|
+
querystr = <<-END
|
9
|
+
select rp.*, p.name
|
10
|
+
from #{prefix}roles_permissions rp inner join #{prefix}permissions p
|
11
|
+
on rp.permission_id = p.id
|
12
|
+
where role_id in (?) order by p.name
|
13
|
+
END
|
14
|
+
return find_by_sql([querystr, role_ids])
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Goldberg
|
2
|
+
class SiteController < ActiveRecord::Base
|
3
|
+
include Goldberg::Model
|
4
|
+
|
5
|
+
belongs_to :permission
|
6
|
+
has_many :controller_actions, :order => 'name', :dependent => :destroy
|
7
|
+
|
8
|
+
validates_presence_of :name, :permission_id
|
9
|
+
validates_uniqueness_of :name
|
10
|
+
|
11
|
+
def self.classes
|
12
|
+
for path in ActionController::Routing.controller_paths do
|
13
|
+
self.load_class_files(path)
|
14
|
+
end
|
15
|
+
|
16
|
+
classes = Hash.new
|
17
|
+
|
18
|
+
ObjectSpace.each_object(Class) do |klass|
|
19
|
+
if klass.respond_to? :controller_path
|
20
|
+
if (klass.to_s != ApplicationController.to_s and
|
21
|
+
klass.ancestors.map{|c|c.to_s}.include?(ApplicationController.to_s))
|
22
|
+
classes[klass.controller_path] = klass
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
return classes
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
def self.load_class_files(path)
|
32
|
+
prereqs = []
|
33
|
+
files = []
|
34
|
+
dirs = []
|
35
|
+
for file in Dir.glob("#{path}/*").sort do
|
36
|
+
if file.match /_controller\.rb$/
|
37
|
+
files << file
|
38
|
+
elsif file.match /\.rb$/
|
39
|
+
prereqs << file
|
40
|
+
elsif File.directory? file
|
41
|
+
dirs << file
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
(prereqs + files).each do |file|
|
46
|
+
begin
|
47
|
+
load file
|
48
|
+
rescue
|
49
|
+
logger.info "Couldn't load file '#{file}' (already loaded?)"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
dirs.each do |dir|
|
54
|
+
self.load_class_files(dir)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
module Goldberg
|
2
|
+
class SystemSettings < ActiveRecord::Base
|
3
|
+
set_table_name 'system_settings'
|
4
|
+
include Goldberg::Model
|
5
|
+
|
6
|
+
attr_accessor :public_role, :default_markup_style
|
7
|
+
attr_accessor :site_default_page, :not_found_page, :permission_denied_page,
|
8
|
+
:session_expired_page
|
9
|
+
|
10
|
+
# Make sure that all the standard pages have been set.
|
11
|
+
validates_presence_of :public_role_id, :site_default_page_id, :not_found_page_id,
|
12
|
+
:permission_denied_page_id, :session_expired_page_id
|
13
|
+
|
14
|
+
# If self-reg is enabled, ensure there is a self-reg role set.
|
15
|
+
validates_each :self_reg_enabled do |record, attr, value|
|
16
|
+
result = true
|
17
|
+
if value and not (record.self_reg_role_id and record.self_reg_role_id > 0)
|
18
|
+
record.errors.add attr, <<-END
|
19
|
+
If self-registration is enabled, you must specify the default Role to
|
20
|
+
assign to self-registered users.
|
21
|
+
END
|
22
|
+
result = false
|
23
|
+
end
|
24
|
+
|
25
|
+
if value and not (record.self_reg_confirmation_error_page_id and
|
26
|
+
record.self_reg_confirmation_error_page_id > 0)
|
27
|
+
record.errors.add attr, <<-END
|
28
|
+
If self-registration is enabled, you must specify an error page to be
|
29
|
+
displayed to any users who try to access the site, but who are not yet
|
30
|
+
confirmed.
|
31
|
+
END
|
32
|
+
result = false
|
33
|
+
end
|
34
|
+
result
|
35
|
+
end
|
36
|
+
|
37
|
+
def public_role
|
38
|
+
@public_role ||= Role.find(self.public_role_id)
|
39
|
+
end
|
40
|
+
|
41
|
+
def site_default_page
|
42
|
+
@site_default_page ||= ContentPage.find(self.site_default_page_id)
|
43
|
+
end
|
44
|
+
|
45
|
+
def not_found_page
|
46
|
+
@not_found_page ||= ContentPage.find(self.not_found_page_id)
|
47
|
+
end
|
48
|
+
|
49
|
+
def permission_denied_page
|
50
|
+
@permission_denied_page ||= ContentPage.find(self.permission_denied_page_id)
|
51
|
+
end
|
52
|
+
|
53
|
+
def session_expired_page
|
54
|
+
@session_expired_page ||= ContentPage.find(self.session_expired_page_id)
|
55
|
+
end
|
56
|
+
|
57
|
+
def self_reg_confirmation_error_page
|
58
|
+
@self_reg_confirmation_error_page ||=
|
59
|
+
ContentPage.find(self.self_reg_confirmation_error_page_id)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Returns an array of system page settings for a given page,
|
63
|
+
# or nil if the page is not a system page.
|
64
|
+
def system_pages(pageid)
|
65
|
+
pages = Array.new
|
66
|
+
|
67
|
+
if self.site_default_page_id == pageid
|
68
|
+
pages << "Site default page"
|
69
|
+
end
|
70
|
+
if self.not_found_page_id == pageid
|
71
|
+
pages << "Not found page"
|
72
|
+
end
|
73
|
+
if self.permission_denied_page_id == pageid
|
74
|
+
pages << "Permission denied page"
|
75
|
+
end
|
76
|
+
if self.session_expired_page_id == pageid
|
77
|
+
pages << "Session expired page"
|
78
|
+
end
|
79
|
+
|
80
|
+
if self.self_reg_confirmation_error_page_id == pageid
|
81
|
+
pages << "Self-registration confirmation error page"
|
82
|
+
end
|
83
|
+
|
84
|
+
if pages.length > 0
|
85
|
+
return pages
|
86
|
+
else
|
87
|
+
return nil
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def get_start_path
|
92
|
+
if self.start_path and self.start_path.length > 0
|
93
|
+
self.start_path
|
94
|
+
else
|
95
|
+
"/"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def self_reg_role
|
100
|
+
@self_reg_role ||= self.self_reg_role_id ? Role.find(self.self_reg_role_id) :
|
101
|
+
Role.new(:id => nil, :name => '(none)')
|
102
|
+
end
|
103
|
+
|
104
|
+
def self_reg_confirmation_error_page
|
105
|
+
@self_reg_confirmation_error_page ||= (self.self_reg_confirmation_error_page_id ?
|
106
|
+
ContentPage.find(self.self_reg_confirmation_error_page_id) :
|
107
|
+
ContentPage.new(:id => nil, :name => '(none)')
|
108
|
+
)
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'digest/sha1'
|
2
|
+
|
3
|
+
module Goldberg
|
4
|
+
class User < ActiveRecord::Base
|
5
|
+
include Goldberg::Model
|
6
|
+
|
7
|
+
belongs_to :role
|
8
|
+
|
9
|
+
validates_presence_of :name, :role_id, :password
|
10
|
+
validates_uniqueness_of :name
|
11
|
+
|
12
|
+
attr_accessor :clear_password
|
13
|
+
attr_accessor :confirm_password
|
14
|
+
|
15
|
+
def before_validation
|
16
|
+
if self.clear_password # Only update password if changed
|
17
|
+
self.password_salt = self.object_id.to_s + rand.to_s
|
18
|
+
self.password = Digest::SHA1.hexdigest(self.password_salt +
|
19
|
+
self.clear_password)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def before_save
|
24
|
+
if self.self_reg_confirmation_required
|
25
|
+
self.set_confirmation_key
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def after_save
|
30
|
+
self.clear_password = nil
|
31
|
+
end
|
32
|
+
|
33
|
+
def check_password(clear_password)
|
34
|
+
self.password == Digest::SHA1.hexdigest(self.password_salt.to_s +
|
35
|
+
clear_password)
|
36
|
+
end
|
37
|
+
|
38
|
+
def set_confirmation_key
|
39
|
+
self.confirmation_key = Digest::SHA1.hexdigest(self.object_id.to_s +
|
40
|
+
rand.to_s)
|
41
|
+
end
|
42
|
+
|
43
|
+
def email_valid?
|
44
|
+
self.email &&
|
45
|
+
self.email.length > 0 &&
|
46
|
+
# http://regexlib.com/DisplayPatterns.aspx
|
47
|
+
self.email =~ /\A.+@[^\.].*\.[a-z]{2,}\z/
|
48
|
+
end
|
49
|
+
|
50
|
+
def get_start_path
|
51
|
+
if self.start_path and self.start_path.length > 0
|
52
|
+
self.start_path
|
53
|
+
else
|
54
|
+
self.role.get_start_path
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
class << self
|
59
|
+
def random_password
|
60
|
+
letters = ('A' .. 'Z').to_a + ('a' .. 'z').to_a
|
61
|
+
password = (1 .. 6).collect do
|
62
|
+
letters[ (rand * letters.length).to_i ]
|
63
|
+
end
|
64
|
+
password.to_s
|
65
|
+
end
|
66
|
+
end # class methods
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|