我需要提供动态角色分配(角色/权限)。更清楚地说,最终用户应该能够创建角色,将权限分配给新用户。所以我正在考虑将角色和权限存储在每个用户的表中。
有没有一种聪明的方法可以做到这一点(任何其他插件?),或者我应该编写代码来使用声明性授权来做到这一点。一些光线会有所帮助。谢谢!
我需要提供动态角色分配(角色/权限)。更清楚地说,最终用户应该能够创建角色,将权限分配给新用户。所以我正在考虑将角色和权限存储在每个用户的表中。
有没有一种聪明的方法可以做到这一点(任何其他插件?),或者我应该编写代码来使用声明性授权来做到这一点。一些光线会有所帮助。谢谢!
尝试回答这些以更接近解决方案:
我最近在一个项目中使用了CanCan,觉得它很酷。您创建一个 Ability 类并使用它来决定用户是否“可以”执行操作......您可以检查方法中表中是否存在权限,或者他们的规则集是否允许该操作。
我从 github 自述文件中获取了所有这些示例代码:
class Ability
include CanCan::Ability
def initialize(user)
if user.admin?
can :manage, :all
else
can :read, :all
end
end
end
然后在您的视图和控制器中,您可以检查授权级别
<% if can? :update, @article %>
<%= link_to "Edit", edit_article_path(@article) %>
<% end %>
def show
@article = Article.find(params[:id])
authorize! :read, @article
end
Cancan is great for simple/starting projects but you should definitely wrap it if you have a monolithic app. Cancan should be a early solution but not a final one. If your looking at policy objects (pundit) it might be a code smell you need to build your own authorization model. Authorization like integration varies client to client and if your looking for more dynamic solutions or you have too many roles to speak of, cancan is not for you. You may need a more data-driven security model. For example if you can grant someone else access to an entity.