我正在构建用户角色管理系统。它有Permission
模型和Role
模型。 Role has_many permissions
和User has_many roles
。因此,我们需要permsissions
和roles
的CRUD。
我正在考虑采用不同的方法。如何在我的应用程序中获取所有路由并从中创建权限?基本上权限是转到路径的权限,我们在路由中有一个路径列表。
我能够获得我的应用程序中的所有路径,如
Rails.application.routes.routes.to_a
但我无法在任何地方看到这种方法。你对此有何看法?请分享您的建议。提前致谢。
答案 0 :(得分:0)
如果要基于每个路由强制执行权限,请为application_controller
中的每个角色创建方法,以检查用户是否具有相应的权限并重定向或以其他方式。在before_action
所需的控制器和操作上使用它。
答案 1 :(得分:0)
您检查了https://github.com/ryanb/cancan吗?使用此gem,您可以在多个模型中定义角色并处理禁用的资源
答案 2 :(得分:0)
我认为你所描述的是cancancan的完美用例。有了它,您可以定义一个能力等级
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
这将允许管理员和贡献者访问所有操作(因为管理员可以管理所有资源,而贡献者可以管理帖子),而其他用户只能访问只读动作(索引,显示)。您当然也可以在资源级别控制访问。