rails 中基于路由的角色管理
Routes based role management in rails
我正在构建一个用户角色管理系统。它有一个 Permission
模型和一个 Role
模型。 Role has_many permissions
和 User has_many roles
。所以我们需要 permsissions
和 roles
的 CRUD。
我正在考虑一种不同的方法。如何获取我的应用程序中的所有路由并从中创建权限?基本上权限是去路径的权限,我们在路由中有一个路径列表。
我能够在我的应用程序中获取所有路由,例如
Rails.application.routes.routes.to_a
但我看不到这种方法在任何地方得到实施。你对此有何看法?请分享您的建议。提前致谢。
如果您想在每个路由的基础上施加权限,请为 application_controller
中的每个角色创建方法,检查用户是否对其具有相应的权限并重定向或其他。在 before_action
个您想要的控制器和操作上使用它..
你检查过https://github.com/ryanb/cancan了吗?使用此 gem 您可以在多个模型中定义角色并处理禁止的资源
我认为您描述的是 cancancan 的完美用例。有了它,你定义了一个能力class
class Ability
include CanCan::Ability
def initialize(user)
# See the wiki for details:
# https://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities
if user.admin?
can :manage, :all
elsif user.contributor?
can :manage, [Post]
else
can :read, :all
end
end
end
然后可用于控制控制器级别的访问
class PostsController < ActionController::Base
load_and_authorize_resource
end
这将允许管理员和贡献者访问所有操作(因为管理员可以管理所有资源,而贡献者可以管理帖子)而其他用户将只能访问 read 操作(索引、显示)。您当然也可以在资源级别控制访问权限。
我正在构建一个用户角色管理系统。它有一个 Permission
模型和一个 Role
模型。 Role has_many permissions
和 User has_many roles
。所以我们需要 permsissions
和 roles
的 CRUD。
我正在考虑一种不同的方法。如何获取我的应用程序中的所有路由并从中创建权限?基本上权限是去路径的权限,我们在路由中有一个路径列表。
我能够在我的应用程序中获取所有路由,例如
Rails.application.routes.routes.to_a
但我看不到这种方法在任何地方得到实施。你对此有何看法?请分享您的建议。提前致谢。
如果您想在每个路由的基础上施加权限,请为 application_controller
中的每个角色创建方法,检查用户是否对其具有相应的权限并重定向或其他。在 before_action
个您想要的控制器和操作上使用它..
你检查过https://github.com/ryanb/cancan了吗?使用此 gem 您可以在多个模型中定义角色并处理禁止的资源
我认为您描述的是 cancancan 的完美用例。有了它,你定义了一个能力class
class Ability
include CanCan::Ability
def initialize(user)
# See the wiki for details:
# https://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities
if user.admin?
can :manage, :all
elsif user.contributor?
can :manage, [Post]
else
can :read, :all
end
end
end
然后可用于控制控制器级别的访问
class PostsController < ActionController::Base
load_and_authorize_resource
end
这将允许管理员和贡献者访问所有操作(因为管理员可以管理所有资源,而贡献者可以管理帖子)而其他用户将只能访问 read 操作(索引、显示)。您当然也可以在资源级别控制访问权限。