目標
1. 用 Device註冊帳號的初始帳號都是一般權限
2. 有一個網頁可以修改某個user為 admin的權限
3. 每個user都可以看某個頁面,但是因為權限不同而會不同
但是正如同
http://blog.xdite.net/posts/2012/07/30/cancan-rule-engine-authorization-based-library-1/
http://blog.xdite.net/posts/2012/07/30/cancan-rule-engine-authorization-based-library-2/
http://blog.xdite.net/posts/2012/07/30/cancan-rule-engine-authorization-based-library-3/
這三篇講的 官方的文件真的看不懂 (其實是我英文不好 Orz)
- 加入cancan
# 使用者權限
gem "cancan"
執行 bundle install - 關掉上次工作內容 中的 admin::lists
把routes.rb中的項目關閉 - 加入新的vc
rails g controller admin::users - 在 controllers/admin/users_controller.rb 裡加入
- 加入list 要顯示的 controller and model
rails g controller lists
rails g model list title:string objectId:string
註:因為其實我們的後台只是要控制parse (用javascript 控制),在現階段的目標其實不用model才是。
但是cancan需要 controller 對應到同樣名稱的model ,
如果需要產生model 需要在controller 中權限限制的話
要在 controllers/list_controller.rb 加入
load_and_authorize_resource - 在 view/list/index.html.erb中加入
<%= content_for :head do %> <% end %> <%= render :partial => "login" %> <% if can? :create, @list %> <%= render :partial => "lists_add_form" %> <% end %>
if can? :create, @list 就是拿來限制(條件)view顯至的狀況
- 顯示的規則寫在 models/ability.rb
先使用
rails g cancan:ability
建立該檔案
然後再加入
if user.blank? # not logged in cannot :manage, :all elsif user.admin # admin can :manage, :all else cannot :manage, :all end
主要就是拿來限制user的各種狀況,對各個api 的使用權
而上一個在view的if can? 就是拿這個表去確認
class Admin::UsersController < ApplicationController before_filter :authenticate def index @users = User.all end def update @user = User.find(params[:id]) #user_admin_params if (params[:user][:admin].eql?("1") ) @user.admin = true else @user.admin = false end @user.save redirect_to :action => :index end protected def authenticate authenticate_or_request_with_http_basic do |user_name, password| user_nameMD5 = Digest::MD5.hexdigest(user_name) passwordMD5 = Digest::MD5.hexdigest(password) user_nameMD5 == "????????????????" && passwordMD5 == "??????????????" end end def user_admin_params params.require(:user).permit(:user) end end
主要目的是做一個簡單的認證,然後可以顯示現在的使用者列表,且可以更新 admin的狀態
在views/admin/users/index.html.erb 裡則寫
<% @users.each do |user| %> <%= user.email %> <%= user.admin %> <%= form_for user, :url => admin_user_path(user), :method => :put do |f| %> <%= f.label :admin %> <%= f.check_box :admin %> <%= f.submit "update" %> <% end %> <% end %>
那這樣就可以靠簡單的basic 認證,登入修改使用者的admin的屬性
沒有留言:
張貼留言