lockdown_vail 1.6.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/README.txt +36 -0
- data/Rakefile +38 -0
- data/VERSION +1 -0
- data/lib/lockdown/context.rb +41 -0
- data/lib/lockdown/database.rb +41 -0
- data/lib/lockdown/errors.rb +11 -0
- data/lib/lockdown/frameworks/rails/controller.rb +187 -0
- data/lib/lockdown/frameworks/rails/view.rb +50 -0
- data/lib/lockdown/frameworks/rails.rb +114 -0
- data/lib/lockdown/helper.rb +111 -0
- data/lib/lockdown/orms/active_record.rb +68 -0
- data/lib/lockdown/permission.rb +222 -0
- data/lib/lockdown/references.rb +19 -0
- data/lib/lockdown/rspec_helper.rb +114 -0
- data/lib/lockdown/rules.rb +372 -0
- data/lib/lockdown/session.rb +66 -0
- data/lib/lockdown/system.rb +58 -0
- data/lib/lockdown.rb +87 -0
- data/lockdown.gemspec +118 -0
- data/lockdown_vail.gemspec +120 -0
- data/rails_generators/lockdown/lockdown_generator.rb +274 -0
- data/rails_generators/lockdown/templates/app/controllers/permissions_controller.rb +22 -0
- data/rails_generators/lockdown/templates/app/controllers/sessions_controller.rb +39 -0
- data/rails_generators/lockdown/templates/app/controllers/user_groups_controller.rb +122 -0
- data/rails_generators/lockdown/templates/app/controllers/users_controller.rb +117 -0
- data/rails_generators/lockdown/templates/app/helpers/permissions_helper.rb +2 -0
- data/rails_generators/lockdown/templates/app/helpers/user_groups_helper.rb +2 -0
- data/rails_generators/lockdown/templates/app/helpers/users_helper.rb +2 -0
- data/rails_generators/lockdown/templates/app/models/permission.rb +13 -0
- data/rails_generators/lockdown/templates/app/models/profile.rb +10 -0
- data/rails_generators/lockdown/templates/app/models/user.rb +95 -0
- data/rails_generators/lockdown/templates/app/models/user_group.rb +15 -0
- data/rails_generators/lockdown/templates/app/views/permissions/index.html.erb +16 -0
- data/rails_generators/lockdown/templates/app/views/permissions/show.html.erb +26 -0
- data/rails_generators/lockdown/templates/app/views/sessions/new.html.erb +12 -0
- data/rails_generators/lockdown/templates/app/views/user_groups/edit.html.erb +33 -0
- data/rails_generators/lockdown/templates/app/views/user_groups/index.html.erb +20 -0
- data/rails_generators/lockdown/templates/app/views/user_groups/new.html.erb +31 -0
- data/rails_generators/lockdown/templates/app/views/user_groups/show.html.erb +29 -0
- data/rails_generators/lockdown/templates/app/views/users/edit.html.erb +51 -0
- data/rails_generators/lockdown/templates/app/views/users/index.html.erb +22 -0
- data/rails_generators/lockdown/templates/app/views/users/new.html.erb +50 -0
- data/rails_generators/lockdown/templates/app/views/users/show.html.erb +33 -0
- data/rails_generators/lockdown/templates/config/initializers/lockit.rb +1 -0
- data/rails_generators/lockdown/templates/db/migrate/create_admin_user.rb +17 -0
- data/rails_generators/lockdown/templates/db/migrate/create_permissions.rb +19 -0
- data/rails_generators/lockdown/templates/db/migrate/create_profiles.rb +26 -0
- data/rails_generators/lockdown/templates/db/migrate/create_user_groups.rb +19 -0
- data/rails_generators/lockdown/templates/db/migrate/create_users.rb +17 -0
- data/rails_generators/lockdown/templates/lib/lockdown/README +42 -0
- data/rails_generators/lockdown/templates/lib/lockdown/init.rb +136 -0
- data/spec/lockdown/context_spec.rb +191 -0
- data/spec/lockdown/database_spec.rb +66 -0
- data/spec/lockdown/frameworks/rails/controller_spec.rb +240 -0
- data/spec/lockdown/frameworks/rails/view_spec.rb +87 -0
- data/spec/lockdown/frameworks/rails_spec.rb +163 -0
- data/spec/lockdown/permission_spec.rb +156 -0
- data/spec/lockdown/rspec_helper_spec.rb +41 -0
- data/spec/lockdown/rules_spec.rb +245 -0
- data/spec/lockdown/session_spec.rb +125 -0
- data/spec/lockdown/system_spec.rb +51 -0
- data/spec/lockdown_spec.rb +19 -0
- data/spec/rcov.opts +5 -0
- data/spec/spec.opts +3 -0
- data/spec/spec_helper.rb +8 -0
- metadata +140 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
<h1>Listing Permissions</h1>
|
2
|
+
|
3
|
+
<table>
|
4
|
+
<tr>
|
5
|
+
<th>Name</th>
|
6
|
+
</tr>
|
7
|
+
|
8
|
+
<%% for permission in @permissions %>
|
9
|
+
<tr>
|
10
|
+
<td><%%=h permission.name %></td>
|
11
|
+
<td><%%= link_to 'Show', <%= namespace.blank? ? 'permission_path(permission)' : "#{namespace}_permission_path(permission)" %> %></td>
|
12
|
+
</tr>
|
13
|
+
<%% end %>
|
14
|
+
</table>
|
15
|
+
|
16
|
+
<br />
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<p>
|
2
|
+
<b>Name</b><br />
|
3
|
+
<%%= h @permission.name %>
|
4
|
+
</p>
|
5
|
+
<p>
|
6
|
+
<b>Access rights:</b><br />
|
7
|
+
<%%
|
8
|
+
Lockdown::System.access_rights_for_permission(@permission).each do |access_right|
|
9
|
+
%>
|
10
|
+
<%%= access_right %><br/>
|
11
|
+
<%%
|
12
|
+
end
|
13
|
+
%>
|
14
|
+
</p>
|
15
|
+
<p>
|
16
|
+
<b>Users with permission:</b><br />
|
17
|
+
<%%
|
18
|
+
@permission.all_users.each do |user|
|
19
|
+
%>
|
20
|
+
<%%= link_to_or_show(user.full_name, <%= namespace.blank? ? 'user' : "#{namespace}_user_path(user)" %>) %><br/>
|
21
|
+
<%%
|
22
|
+
end
|
23
|
+
%>
|
24
|
+
</p>
|
25
|
+
|
26
|
+
<%%= link_to 'Back', <%= namespace.blank? ? 'permissions_path' : "#{namespace}_permissions_path" %> %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%%= flash[:notice] if flash[:notice] %>
|
2
|
+
<%%= flash[:error] if flash[:error] %>
|
3
|
+
|
4
|
+
<%% form_tag sessions_path do -%>
|
5
|
+
<p><label for="login">Login</label><br/>
|
6
|
+
<%%= text_field_tag 'login' %></p>
|
7
|
+
|
8
|
+
<p><label for="password">Password</label><br/>
|
9
|
+
<%%= password_field_tag 'password' %></p>
|
10
|
+
|
11
|
+
<p><%%= submit_tag 'Log in' %></p>
|
12
|
+
<%% end -%>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<h1>Editing User Group</h1>
|
2
|
+
|
3
|
+
<%% form_for(<%= namespace.blank? ? '@user_group' : "[:#{namespace}, @user_group]" %>) do |f| %>
|
4
|
+
<%%= f.error_messages %>
|
5
|
+
<p>
|
6
|
+
<b>Name</b><br />
|
7
|
+
<%%= f.text_field :name %>
|
8
|
+
</p>
|
9
|
+
<p>
|
10
|
+
<b>Permissions</b><br />
|
11
|
+
<ul style="list-style: none;">
|
12
|
+
<%%
|
13
|
+
@all_permissions.each_with_index do |perm,i|
|
14
|
+
input_id = "perm_#{perm.id}"
|
15
|
+
checked = (@user_group.permission_ids.include?(perm.id) ? "checked" : "")
|
16
|
+
%>
|
17
|
+
<li id="li_<%%= input_id %>">
|
18
|
+
<label for="<%%= input_id %>">
|
19
|
+
<input id="<%%= input_id %>" name="<%%= input_id %>" type="checkbox" <%%= checked %>/> <%%= perm.name %>
|
20
|
+
</label>
|
21
|
+
</li>
|
22
|
+
<%%
|
23
|
+
end
|
24
|
+
%>
|
25
|
+
</ul>
|
26
|
+
</p>
|
27
|
+
|
28
|
+
<p> <%%= f.submit "Update" %> </p>
|
29
|
+
<%% end %>
|
30
|
+
|
31
|
+
|
32
|
+
<%%= link_to 'Show', <%= namespace.blank? ? '@user_group' : "#{namespace}_user_group_path(@user_group)" %> %> |
|
33
|
+
<%%= link_to 'Back', <%= namespace.blank? ? 'user_groups_path' : "#{namespace}_user_groups_path" %> %>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<h1>Listing User Groups</h1>
|
2
|
+
|
3
|
+
<table>
|
4
|
+
<tr>
|
5
|
+
<th>Name</th>
|
6
|
+
</tr>
|
7
|
+
|
8
|
+
<%% for user_group in @user_groups %>
|
9
|
+
<tr>
|
10
|
+
<td><%%=h user_group.name %></td>
|
11
|
+
<td><%%= link_to 'Show', <%= namespace.blank? ? "user_group_path(user_group)" : "#{namespace}_user_group_path(user_group)" %> %></td>
|
12
|
+
<td><%%= link_to('Edit', <%= namespace.blank? ? "edit_user_group_path(user_group)" : "edit_#{namespace}_user_group_path(user_group)" %>) unless Lockdown::System.has_user_group?(user_group) %></td>
|
13
|
+
<td><%%= link_to('Destroy',<%= namespace.blank? ? "user_group_path(user_group)" : "#{namespace}_user_group_path(user_group)" %>, :confirm => 'Are you sure?', :method => :delete) unless Lockdown::System.has_user_group?(user_group) %></td>
|
14
|
+
</tr>
|
15
|
+
<%% end %>
|
16
|
+
</table>
|
17
|
+
|
18
|
+
<br />
|
19
|
+
|
20
|
+
<%%= link_to 'New User Group', <%= namespace.blank? ? "new_user_group_path" : "new_#{namespace}_user_group_path" %> %>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<h1>New User Group</h1>
|
2
|
+
|
3
|
+
<%% form_for(<%= namespace.blank? ? '@user_group' : "[:#{namespace}, @user_group]" %>) do |f| %>
|
4
|
+
<%%= f.error_messages %>
|
5
|
+
<p>
|
6
|
+
<b>Name</b><br />
|
7
|
+
<%%= f.text_field :name %>
|
8
|
+
</p>
|
9
|
+
<p>
|
10
|
+
<b>Permissions</b><br />
|
11
|
+
<ul style="list-style: none;">
|
12
|
+
<%%
|
13
|
+
@all_permissions.each_with_index do |perm,i|
|
14
|
+
input_id = "perm_#{perm.id}"
|
15
|
+
checked = (@user_group.permission_ids.include?(perm.id) ? "checked" : "")
|
16
|
+
%>
|
17
|
+
<li id="li_<%%= input_id %>">
|
18
|
+
<label for="<%%= input_id %>">
|
19
|
+
<input id="<%%= input_id %>" name="<%%= input_id %>" type="checkbox" <%%= checked %>/> <%%= perm.name %>
|
20
|
+
</label>
|
21
|
+
</li>
|
22
|
+
<%%
|
23
|
+
end
|
24
|
+
%>
|
25
|
+
</ul>
|
26
|
+
</p>
|
27
|
+
|
28
|
+
<p> <%%= f.submit "Create" %> </p>
|
29
|
+
<%% end %>
|
30
|
+
|
31
|
+
<%%= link_to 'Back', <%= namespace.blank? ? 'user_groups_path' : "#{namespace}_user_groups_path" %> %>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<p>
|
2
|
+
<b>Name</b><br />
|
3
|
+
<%%= h @user_group.name %>
|
4
|
+
</p>
|
5
|
+
<p>
|
6
|
+
<b>Permissions</b><br />
|
7
|
+
<%%
|
8
|
+
@user_group.permissions.each do |perm|
|
9
|
+
%>
|
10
|
+
<%%= perm.name %><br/>
|
11
|
+
<%%
|
12
|
+
end
|
13
|
+
%>
|
14
|
+
</p>
|
15
|
+
<p>
|
16
|
+
<b>Users in user group:</b><br />
|
17
|
+
<%%
|
18
|
+
@user_group.all_users.each do |user|
|
19
|
+
%>
|
20
|
+
<%%= link_to_or_show(user.full_name, <%= namespace.blank? ? 'user' : "#{namespace}_user_path(user)" %>) %><br/>
|
21
|
+
<%%
|
22
|
+
end
|
23
|
+
%>
|
24
|
+
</p>
|
25
|
+
|
26
|
+
<%% unless Lockdown::System.has_user_group?(@user_group) %>
|
27
|
+
<%%= link_to 'Edit', <%= namespace.blank? ? 'edit_user_group_path(@user_group)' : "edit_#{namespace}_user_group_path(@user_group)" %> %> |
|
28
|
+
<%% end %>
|
29
|
+
<%%= link_to 'Back', <%= namespace.blank? ? 'user_groups_path' : "#{namespace}_user_groups_path" %> %>
|
@@ -0,0 +1,51 @@
|
|
1
|
+
<h1>Editing User</h1>
|
2
|
+
|
3
|
+
<%% form_for(<%= namespace.blank? ? "@user" : "[:#{namespace}, @user]" %>) do |f| %>
|
4
|
+
<%%= f.error_messages %>
|
5
|
+
<p>
|
6
|
+
<b>First name</b><br />
|
7
|
+
<%%= f.text_field :first_name %>
|
8
|
+
</p>
|
9
|
+
<p>
|
10
|
+
<b>Last name</b><br />
|
11
|
+
<%%= f.text_field :last_name %>
|
12
|
+
</p>
|
13
|
+
<p>
|
14
|
+
<b>Email</b><br />
|
15
|
+
<%%= f.text_field :email %>
|
16
|
+
</p>
|
17
|
+
<p>
|
18
|
+
<b>Login</b><br />
|
19
|
+
<%%= f.text_field :login %>
|
20
|
+
</p>
|
21
|
+
<p>
|
22
|
+
<b>Password</b><br />
|
23
|
+
<%%= f.password_field :password %>
|
24
|
+
</p>
|
25
|
+
<p>
|
26
|
+
<b>Password confirmation</b><br />
|
27
|
+
<%%= f.password_field :password_confirmation %>
|
28
|
+
</p>
|
29
|
+
<p>
|
30
|
+
<b>User Groups</b><br />
|
31
|
+
<ul style="list-style: none;">
|
32
|
+
<%%
|
33
|
+
@user_groups_for_user.each_with_index do |ug,i|
|
34
|
+
input_id = "ug_#{ug.id}"
|
35
|
+
checked = (@user.user_group_ids.include?(ug.id) ? "checked" : "")
|
36
|
+
%>
|
37
|
+
<li id="li_<%%= input_id %>">
|
38
|
+
<label for="<%%= input_id %>">
|
39
|
+
<input id="<%%= input_id %>" name="<%%= input_id %>" type="checkbox" <%%= checked %>/> <%%= ug.name %>
|
40
|
+
</label>
|
41
|
+
</li>
|
42
|
+
<%%
|
43
|
+
end
|
44
|
+
%>
|
45
|
+
</ul>
|
46
|
+
</p>
|
47
|
+
<p> <%%= f.submit "Update" %> </p>
|
48
|
+
<%% end %>
|
49
|
+
|
50
|
+
<%%= link_to 'Show', <%= namespace.blank? ? "user_path(@user)" : "#{namespace}_user_path(@user)" %> %> |
|
51
|
+
<%%= link_to 'Back', <%= namespace.blank? ? "users_path" : "#{namespace}_users_path" %> %>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<h1>Listing Users</h1>
|
2
|
+
|
3
|
+
<table>
|
4
|
+
<tr>
|
5
|
+
<th>Login</th>
|
6
|
+
<th>Name</th>
|
7
|
+
</tr>
|
8
|
+
|
9
|
+
<%% @users.each do |user| %>
|
10
|
+
<tr>
|
11
|
+
<td><%%=h user.login %></td>
|
12
|
+
<td><%%=h user.full_name %></td>
|
13
|
+
<td><%%= link_to 'Show', <%= namespace.blank? ? "user_path(user)" : "#{namespace}_user_path(user)" %> %></td>
|
14
|
+
<td><%%= link_to 'Edit', <%= namespace.blank? ? "edit_user_path(user)" : "edit_#{namespace}_user_path(user)" %> %></td>
|
15
|
+
<td><%%= link_to 'Destroy', <%= namespace.blank? ? "user_path(user)" : "#{namespace}_user_path(user)" %>, :confirm => 'Are you sure?', :method => :delete %></td>
|
16
|
+
</tr>
|
17
|
+
<%% end %>
|
18
|
+
</table>
|
19
|
+
|
20
|
+
<br />
|
21
|
+
|
22
|
+
<%%= link_to 'New User', <%= namespace.blank? ? "new_user_path" : "new_#{namespace}_user_path" %> %>
|
@@ -0,0 +1,50 @@
|
|
1
|
+
<h1>New User</h1>
|
2
|
+
|
3
|
+
<%% form_for(<%= namespace.blank? ? "@user" : "[:#{namespace}, @user]" %>) do |f| %>
|
4
|
+
<%%= f.error_messages %>
|
5
|
+
<p>
|
6
|
+
<b>First name</b><br />
|
7
|
+
<%%= f.text_field :first_name %>
|
8
|
+
</p>
|
9
|
+
<p>
|
10
|
+
<b>Last name</b><br />
|
11
|
+
<%%= f.text_field :last_name %>
|
12
|
+
</p>
|
13
|
+
<p>
|
14
|
+
<b>Email</b><br />
|
15
|
+
<%%= f.text_field :email %>
|
16
|
+
</p>
|
17
|
+
<p>
|
18
|
+
<b>Login</b><br />
|
19
|
+
<%%= f.text_field :login %>
|
20
|
+
</p>
|
21
|
+
<p>
|
22
|
+
<b>Password</b><br />
|
23
|
+
<%%= f.password_field :password %>
|
24
|
+
</p>
|
25
|
+
<p>
|
26
|
+
<b>Password confirmation</b><br />
|
27
|
+
<%%= f.password_field :password_confirmation %>
|
28
|
+
</p>
|
29
|
+
<p>
|
30
|
+
<b>User Groups</b><br />
|
31
|
+
<ul style="list-style: none;">
|
32
|
+
<%%
|
33
|
+
@user_groups_for_user.each_with_index do |ug,i|
|
34
|
+
input_id = "ug_#{ug.id}"
|
35
|
+
checked = (@user.user_group_ids.include?(ug.id) ? "checked" : "")
|
36
|
+
%>
|
37
|
+
<li id="li_<%%= input_id %>">
|
38
|
+
<label for="<%%= input_id %>">
|
39
|
+
<input id="<%%= input_id %>" name="<%%= input_id %>" type="checkbox" <%%= checked %>/> <%%= ug.name %>
|
40
|
+
</label>
|
41
|
+
</li>
|
42
|
+
<%%
|
43
|
+
end
|
44
|
+
%>
|
45
|
+
</ul>
|
46
|
+
</p>
|
47
|
+
<p> <%%= f.submit "Create" %> </p>
|
48
|
+
<%% end %>
|
49
|
+
|
50
|
+
<%%= link_to 'Back', <%= namespace.blank? ? "users_path" : "#{namespace}_users_path" %> %>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<h1>Showing User</h1>
|
2
|
+
|
3
|
+
<p>
|
4
|
+
<b>First name</b><br />
|
5
|
+
<%%= h @user.first_name %>
|
6
|
+
</p>
|
7
|
+
<p>
|
8
|
+
<b>Last name</b><br />
|
9
|
+
<%%= h @user.last_name %>
|
10
|
+
</p>
|
11
|
+
<p>
|
12
|
+
<b>Email</b><br />
|
13
|
+
<%%= h @user.email %>
|
14
|
+
</p>
|
15
|
+
<p>
|
16
|
+
<b><span>L</span>ogin</b><br />
|
17
|
+
<%%= h @user.login %>
|
18
|
+
</p>
|
19
|
+
<p>
|
20
|
+
<b>User Groups</b><br />
|
21
|
+
<ul style="list-style: none;">
|
22
|
+
<%%
|
23
|
+
@user.user_groups.each do |ug|
|
24
|
+
%>
|
25
|
+
<%%= h ug.name %> <br/>
|
26
|
+
<%%
|
27
|
+
end
|
28
|
+
%>
|
29
|
+
</ul>
|
30
|
+
</p>
|
31
|
+
|
32
|
+
<%%= link_to 'Edit', <%= namespace.blank? ? "edit_user_path(@user)" : "edit_#{namespace}_user_path(@user)" %> %> |
|
33
|
+
<%%= link_to 'Back', <%= namespace.blank? ? "users_path" : "#{namespace}_users_path" %> %>
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'lockdown'
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class CreateAdminUser < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
# TODO: Change the password
|
4
|
+
u = User.create(:password => "password",
|
5
|
+
:password_confirmation => "password",
|
6
|
+
:first_name => "Administrator",
|
7
|
+
:last_name => "User",
|
8
|
+
:email => "administrator@a.com",
|
9
|
+
:login => "admin")
|
10
|
+
|
11
|
+
Lockdown::System.make_user_administrator(u)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.down
|
15
|
+
#Nothing to see here...
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class CreatePermissions < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :permissions do |t|
|
4
|
+
t.string :name
|
5
|
+
|
6
|
+
t.timestamps
|
7
|
+
end
|
8
|
+
|
9
|
+
create_table :permissions_user_groups, :id => false do |t|
|
10
|
+
t.integer :permission_id
|
11
|
+
t.integer :user_group_id
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.down
|
16
|
+
drop_table :permissions_user_groups
|
17
|
+
drop_table :permissions
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class CreateProfiles < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :profiles do |t|
|
4
|
+
t.string :first_name
|
5
|
+
t.string :last_name
|
6
|
+
t.string :email
|
7
|
+
t.integer :updated_by
|
8
|
+
t.boolean :is_disabled
|
9
|
+
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
|
13
|
+
# The System profile is used as the updated_by reference when records
|
14
|
+
# are created programatically and the responsible user cannot be determined
|
15
|
+
# or is simply not available.
|
16
|
+
# TODO: Change email address
|
17
|
+
Profile.create(:first_name => "System",
|
18
|
+
:last_name => "User",
|
19
|
+
:email => "system@a.com")
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.down
|
24
|
+
drop_table :profiles
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class CreateUserGroups < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :user_groups do |t|
|
4
|
+
t.string :name
|
5
|
+
|
6
|
+
t.timestamps
|
7
|
+
end
|
8
|
+
|
9
|
+
create_table :user_groups_users, :id => false do |t|
|
10
|
+
t.integer :user_group_id
|
11
|
+
t.integer :user_id
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.down
|
16
|
+
drop_table :user_groups_users
|
17
|
+
drop_table :user_groups
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class CreateUsers < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :users do |t|
|
4
|
+
t.string :login
|
5
|
+
t.string :crypted_password
|
6
|
+
t.string :salt
|
7
|
+
t.integer :profile_id
|
8
|
+
t.integer :updated_by
|
9
|
+
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.down
|
15
|
+
drop_table :users
|
16
|
+
end
|
17
|
+
end
|