อัญมณี CanCan ไม่ได้รับการดูแลรักษาอีกต่อไป โปรดใช้ไลบรารีการอนุญาตอื่น เช่น CanCanCan หรือ Pundit
<img src=“https://fury-badge.herokuapp.com/rb/cancan.png” alt=“เวอร์ชันอัญมณี” /> <img src=“https://secure.travis-ci.org/ryanb/ cancan.png?branch=master” /> <img src=“https://codeclimate.com/github/ryanb/cancan.png” />
วิกิ | อาร์ดอคส์ | แคสต์หน้าจอ
CanCan เป็นไลบรารีการอนุญาตสำหรับ Ruby on Rails ซึ่งจำกัดทรัพยากรที่ผู้ใช้กำหนดได้รับอนุญาตให้เข้าถึง สิทธิ์ทั้งหมดถูกกำหนดไว้ในที่เดียว (คลาส Ability
) และไม่มีการทำซ้ำระหว่างตัวควบคุม มุมมอง และการสืบค้นฐานข้อมูล
ใน Rails 3 ให้เพิ่มสิ่งนี้ลงใน Gemfile ของคุณแล้วรันคำสั่ง bundle
อัญมณี "cancan"
ใน Rails 2 ให้เพิ่มสิ่งนี้ลงในไฟล์ environment.rb ของคุณ
กำหนดค่า อัญมณี "แคนแคน"
หรือคุณสามารถติดตั้งเป็นปลั๊กอินได้
ติดตั้งปลั๊กอิน Rails git://github.com/ryanb/cancan.git
CanCan คาดว่าเมธอด current_user
จะมีอยู่ในคอนโทรลเลอร์ ขั้นแรก ให้ตั้งค่าการตรวจสอบสิทธิ์บางอย่าง (เช่น Authlogic หรือ Devise) โปรดดูการเปลี่ยนค่าเริ่มต้น หากคุณต้องการลักษณะการทำงานที่แตกต่างออกไป
สิทธิ์ของผู้ใช้ถูกกำหนดไว้ในคลาส Ability
CanCan 1.5 มีตัวสร้าง Rails 3 สำหรับการสร้างคลาสนี้
Rails g cancan: ความสามารถ
ใน Rails 2.3 เพียงเพิ่มคลาสใหม่ใน 'app/models/ability.rb` โดยมีเนื้อหาดังต่อไปนี้:
ความสามารถ ในชั้นเรียน รวม CanCan :: ความสามารถ เริ่มต้น แน่นอน ( ผู้ใช้ ) จบ จบ
ดูการกำหนดความสามารถสำหรับรายละเอียด
สิทธิ์ของผู้ใช้ปัจจุบันสามารถตรวจสอบได้โดยใช้ can?
และ cannot?
วิธีการในมุมมองและตัวควบคุม
<% ถ้าทำได้? :update, @article %> <%= link_to "แก้ไข", edit_article_path(@article) %> <% สิ้นสุด %>
ดูการตรวจสอบความสามารถสำหรับข้อมูลเพิ่มเติม
authorize!
วิธีการในคอนโทรลเลอร์จะทำให้เกิดข้อยกเว้นหากผู้ใช้ไม่สามารถดำเนินการตามที่กำหนดได้
แน่นอน แสดง @article = บทความ . ค้นหา ( พารามิเตอร์ [ :id ]) อนุญาต! :read , @article จบ
การตั้งค่านี้สำหรับทุกการกระทำอาจเป็นเรื่องที่น่าเบื่อ ดังนั้นจึงมีการจัดเตรียมเมธอด load_and_authorize_resource
เพื่ออนุญาตการดำเนินการทั้งหมดในตัวควบคุมทรัพยากรสไตล์ RESTful โดยอัตโนมัติ โดยจะใช้ตัวกรองก่อนหน้าเพื่อโหลดทรัพยากรลงในตัวแปรอินสแตนซ์และอนุญาตสำหรับทุกการกระทำ
คลาส ArticlesController < ApplicationController load_and_authorize_resource แน่นอน แสดง # @article ถูกโหลดและได้รับอนุญาตแล้ว จบ จบ
ดูการอนุญาตการดำเนินการของคอนโทรลเลอร์สำหรับข้อมูลเพิ่มเติม
หากการให้สิทธิ์ผู้ใช้ล้มเหลว ข้อยกเว้น CanCan::AccessDenied
จะถูกยกขึ้น คุณสามารถตรวจจับสิ่งนี้และแก้ไขพฤติกรรมของมันได้ใน ApplicationController
คลาส ApplicationController < ActionController :: Base Rescue_from CanCan :: AccessDenied ทำ | ข้อยกเว้น | เปลี่ยนเส้นทาง_to root_url , :alert => ข้อยกเว้น ข้อความ จบ จบ
ดูการจัดการข้อยกเว้นสำหรับข้อมูลเพิ่มเติม
หากคุณต้องการให้แน่ใจว่าการอนุญาตเกิดขึ้นกับทุกการกระทำในแอปพลิเคชันของคุณ ให้เพิ่ม check_authorization
ให้กับ ApplicationController ของคุณ
คลาส ApplicationController < ActionController :: Base ตรวจสอบ_การอนุญาต จบ
สิ่งนี้จะทำให้เกิดข้อยกเว้นหากไม่มีการอนุญาตในการดำเนินการ หากคุณต้องการข้ามให้เพิ่ม skip_authorization_check
ไปยังคลาสย่อยของคอนโทรลเลอร์ ดูให้แน่ใจว่ามีการอนุญาตสำหรับข้อมูลเพิ่มเติม
อัปเกรดเป็น 1.6
การกำหนดความสามารถ
การตรวจสอบความสามารถ
การอนุญาตการดำเนินการของคอนโทรลเลอร์
การจัดการข้อยกเว้น
การเปลี่ยนค่าเริ่มต้น
ดูเพิ่มเติม
หากคุณมีปัญหาใดๆ กับ CanCan ซึ่งคุณไม่พบวิธีแก้ไขในเอกสารประกอบ โปรดเพิ่มปัญหาบน GitHub หรือแยกโครงการและส่งคำขอดึง
เพื่อให้สเป็คทำงานคุณควรเรียก bundle
แล้ว rake
ดูข้อมูลจำเพาะ/README สำหรับข้อมูลเพิ่มเติม
CanCan ได้รับแรงบันดาลใจจาก declarative_authorization และ aegis ขอขอบคุณผู้มีส่วนร่วม CanCan เป็นอย่างยิ่ง ดู CHANGELOG สำหรับรายการทั้งหมด