5

Tôi đã gặp các vấn đề tương tự như Victor Martin (bạn có thể xem các câu hỏi được hỏi tại đây).Ủy quyền khai báo và if_attribute không hoạt động

Tôi đã ủy quyền khai báo làm việc cho mọi thứ không liên quan đến việc sử dụng điều kiện. Ví dụ.

has_permission_on :users, :to => [:edit, :update, :destroy] do 
if_attribute :user => is { current_user } 
end 

Có bất kỳ cạm bẫy phổ biến nào với Tuyên bố ủy quyền không? Tôi đang sử dụng authlogic và tôi nghi ngờ phương pháp 'current_user' trong bộ điều khiển ứng dụng có thể là nguồn gốc của vấn đề.

+0

tôi đã kết thúc bằng Cancan cho authorizaiton - tôi khuyên bạn nên nó – digitalWestie

Trả lời

4

Lưu ý rằng nếu bạn đang sử dụng "filter_access_to" trong bộ điều khiển, bạn cần đảm bảo rằng bạn có ": attribute_check => true". Không có nó, các khai báo "if_attribute" có điều kiện không làm bất cứ điều gì.

Thông tin chi tiết về vấn đề này in the Declarative Authorization docs

1

Bạn cần phải thêm này để ApplicationController của bạn nếu bạn chưa sẵn sàng:

before_filter :set_current_user 
protected 
def set_current_user 
    Authorization.current_user = current_user 
end 

Sau đó, quy tắc của bạn sẽ trông như thế này:

has_permission_on :users, :to => [:edit, :update, :destroy] do 
    if_attribute :user => is { user } 
end 

Theo như tôi biết declarative_authorization không gọi bất kỳ phương thức nào trên crontroller và không biết current_user có nghĩa là gì trong ví dụ của bạn, nhưng nó cung cấp cho bạn một bản sao của Authorization.current_user được gọi là user mà bạn có thể sử dụng trong tệp authorization_rules.rb của mình.

+0

OK, tôi đã cố gắng sử dụng 'sử dụng' thay vì 'CURRENT_USER'. Bây giờ tôi đã làm điều đó tôi khá nhiều có tất cả những điều trên nhưng nó vẫn không hoạt động. :/ – digitalWestie

+0

Bạn có gặp lỗi hoặc chỉ "quyền bị từ chối" không? Nhật ký của bạn nói gì? –