devise, rolify, cancan: 创建User, Roles, Ability模型运行 generate 命令来生成 User, Roles, Ability 模型,我们可以看到在 models 文件夹下出现了 user.rb,role.rb 和 ability.rb 三个文件,在这些 model 类中都引入了需要的模块。在 db/migrate 下也出现了各 model 的 migration 文件。
清单5. 创建 User, Roles, Ability 模型shirleydembpeveloperWork shirley$ rails generate devise User
Running via Spring preloader in process 60557
invoke active_record
1
| create db/migrate/20170906125504_devise_create_users.rb
|
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
insert app/models/user.rb
route devise_for :users
shirleydembpeveloperWork shirley$ rails generate cancan:ability
Running via Spring preloader in process 60574
create app/models/ability.rb
shirleydembpeveloperWork shirley$ rails generate rolify Role User
Running via Spring preloader in process 60578
invoke active_record
create app/models/role.rb
invoke test_unit
create test/models/role_test.rb
create test/fixtures/roles.yml
insert app/models/role.rb
create db/migrate/20170906125636_rolify_create_roles.rb
insert app/models/user.rb
create config/initializers/rolify.rb
在真正的项目中,我们的用户角色往往并不是那么简单。可以打开 db/migrate 下面的 migration 文件进行编辑,往表中加入你想要的字段。
编辑完 migration 之后,我们需要执行 DB migrate 命令使其生效。
$ rake db:migrate
现在再让我们来查看一下 rails 程序为 user 分配的 routes。
清单6. rails 为 users 分配的 routesshirleydembpeveloperWork shirley$ rake routes | grep users
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
user_password PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
POST /users/password(.:format) devise/passwords#create
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
user_registration PATCH /users(.:format) devise/registrations#update
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
POST /users(.:format) devise/registrations#create
|
devise 为我们提供了一整套齐全的登录注册修改密码功能。在 config/routes 中我们设置当用户登录后才能访问主页,不然则跳到 devise 的登录页面。
清单7. 设置系统的登录首页 devise_scope :user do
authenticated :user do
root 'papers#index', as: :authenticated_root
end
unauthenticated do
1
| root 'devise/sessions#new', as: :unauthenticated_root
|
end
end
运行程序,就可以看到 devise 的登录页面,点击 Sign up 注册一个新用户。
图2. devise 登录界面 |