-
Notifications
You must be signed in to change notification settings - Fork 405
Usage
EppO edited this page Apr 4, 2012
·
40 revisions
- To define a global role:
user = User.find(1)
user.add_role :admin
- To define a role scoped to a resource instance
user = User.find(2)
user.add_role :moderator, Forum.first
- To define a role scoped to a resource class
user = User.find(3)
user.add_role :moderator, Forum
- Starting from rolify 2.1,
grant
is a method alias foradd_role
user = User.find(4)
user.grant :moderator, Forum.last
- To check if a user has a global role:
user = User.find(1)
user.add_role :admin # sets a global role
user.has_role? :admin
=> true
- To check if a user has a role scoped to a resource:
user = User.find(2)
user.add_role :moderator, Forum.first # sets a role scoped to a resource
user.has_role? :moderator, Forum.first
=> true
user.has_role? :moderator, Forum.last
=> false
user.has_role? :moderator
=> false # returns false because the role is not global
user.has_role? :moderator, :any
=> true # returns true because the user has at least one moderator role
- To check if a user has a role scoped to a resource class:
user = User.find(3)
user.add_role :moderator, Forum # sets a role scoped to a resource class
user.has_role? :moderator, Forum
=> true
user.has_role? :moderator, Forum.first
=> true
user.has_role? :moderator, Forum.last
=> true
user.has_role? :moderator
=> false
user.has_role? :moderator, :any
=> true
- A global role has an implicit role for all resources:
user = User.find(4)
user.add_role :moderator # sets a global role
user.has_role? :moderator, Forum.first
=> true
user.has_role? :moderator, Forum.last
=> true
user.has_role? :moderator, Forum
=> true
user.has_role? :moderator, :any
=> true
To be able to use dynamic shortcuts, make sure it's enable in the initializer file (config/initializer/rolify.rb):
Rolify.dynamic_shortcuts = true if defined?(Rails::Server) == true || defined?(Rails::Console) == true
And uncomment the extend Rolify::Dynamic
line in the User class:
extend Rolify::Dynamic
Rolify.configure do |c|
c.use_dynamic_shortcuts
end
that's it !
user = User.find(1)
user.add_role :admin # sets a global role
user.is_admin?
=> true
user.add_role :moderator, Forum.first
user.is_moderator_of? Forum.last
=> false
- Check if the user has ALL specified roles
user = User.find(1)
user.add_role :admin # sets a global role
user.add_role :moderator, Forum.first # sets a role scoped to a resource instance
user.add_role :visitor, Forum # set a role scoped to a resource class
user.has_all_roles? :admin, { :name => :moderator, :resource => Forum.first }, { :name => :visitor, :resource => Forum }
=> true
user.has_all_roles? :admin, { :name => :moderator, :resource => Forum.last }
=> false
user.has_all_roles? :god, { :name => :visitor, :resource => Forum }
=> false
- Check if the user has ANY of specified role
user = User.find(1)
user.add_role :admin # sets a global role
user.add_role :moderator, Forum.first # sets a role scoped to a resource
user.add_role :visitor, Forum # set a role scoped to a resource class
user.has_any_role? :admin, { :name => :moderator, :resource => Forum.first }, { :name => :visitor, :resource => Forum }
=> true
user.has_any_role? :admin, { :name => :moderator, :resource => Forum.last }
=> true
user.has_any_role? :god, { :name => :visitor, :resource => Forum }
=> true
- Remove a global role
user = User.find(1)
user.remove_role :admin
=> true # if user got a admin role
- Remove a role scoped to a resource instance
user = User.find(2)
user.remove_role :moderator, Forum.first
=> true # if user got a moderator role on Forum.first
- Remove a role scoped to a resource class
user = User.find(3)
user.remove_role :moderator, Forum
=> true # if user got a moderator role on Forum or any instance of Forum
- Starting from rolify 2.1,
revoke
is a method alias forremove_role
user = User.find(4)
user.revoke :moderator, Forum.first
Please note:
- Trying to remove a global role whereas the user a role with the same name on a resource will remove that scoped role (whatever the scope is)
- Trying to remove a class scoped role whereas the user an instance scoped role with the same name on a resource will remove that instance scoped role
- Trying to remove a role scoped to a resource class whereas the user has a global role won't remove it
- Trying to remove a role scoped to a resource instance whereas the user has a global role won't remove it
Starting from rolify 3.0, you can search roles on instance level or class level resources.
- Instance level
forum = Forum.first
forum.roles
# => [ list of roles that are only binded to forum instance ]
forum.applied_roles
# => [ list of roles binded to forum instance and to the Forum class ]
- Class level
Forum.with_role(:admin)
# => [ list of Forum instances that has role "admin" binded to it ]
Forum.with_role(:admin, current_user)
# => [ list of Forum instances that has role "admin" binded to it and belongs to current_user roles ]
Forum.find_roles
# => [ list of roles that binded to any Forum instance or to the Forum class ]
Forum.find_roles(:admin)
# => [ list of roles that binded to any Forum instance or to the Forum class with "admin" as a role name ]
Forum.find_roles(:admin, current_user)
# => [ list of roles that binded to any Forum instance or to the Forum class with "admin" as a role name and belongs to current_user roles ]
Previous: Configuration