Skip to content
Snippets Groups Projects
Commit 55c8a504 authored by stellard's avatar stellard
Browse files

added cannot support and multiple can support

parent 344832d1
No related branches found
No related tags found
No related merge requests found
......@@ -16,14 +16,22 @@ module CanCan
end
def database_records
@model_class.where(conditions)
if @rules.size == 0
@model_class.where(false_query)
else
criteria = @model_class.all
@rules.each do |rule|
criteria = chain_criteria(rule, criteria)
end
criteria
end
end
def conditions
if @rules.size == 0
false_query
def chain_criteria rule, criteria
if rule.base_behavior
criteria.or(rule.conditions)
else
@rules.first.conditions
criteria.excludes(rule.conditions)
end
end
......
......@@ -56,7 +56,7 @@ if ENV["MODEL_ADAPTER"] == "mongoid"
lord = MongoidProject.create(:title => 'Lord')
dude = MongoidProject.create(:title => 'Dude')
MongoidProject.accessible_by(@ability, :read).should == [sir]
MongoidProject.accessible_by(@ability, :read).entries.should == [sir]
end
it "should return everything when the defined ability is manage all" do
......@@ -154,7 +154,24 @@ if ENV["MODEL_ADAPTER"] == "mongoid"
@ability.can :read, MongoidProject, :foo => {:bar => 1}
MongoidProject.accessible_by(@ability, :read).entries.first.should == obj
end
it "should exclude from the result if set to cannot" do
obj = MongoidProject.create(:bar => 1)
obj2 = MongoidProject.create(:bar => 2)
@ability.can :read, MongoidProject
@ability.cannot :read, MongoidProject, :bar => 2
MongoidProject.accessible_by(@ability, :read).entries.first.should == obj
end
it "should combine the rules" do
obj = MongoidProject.create(:bar => 1)
obj2 = MongoidProject.create(:bar => 2)
obj3 = MongoidProject.create(:bar => 3)
@ability.can :read, MongoidProject, :bar => 1
@ability.can :read, MongoidProject, :bar => 2
MongoidProject.accessible_by(@ability, :read).entries.should =~ [obj, obj2]
end
it "should not allow to fetch records when ability with just block present" do
@ability.can :read, MongoidProject do
false
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment