我即将推出我的第一个网站,我担心安全问题。我一直看到的前两个角色/权限宝石是针对RoR网络应用程序的cancancan和pundit。与我自己的家用滚动版相比,这些包有明显的优势吗?
为了减少我的版本:我有一个用户,角色和user_role模型,其中user_role是包含多对多关系的连接表。我通过roles_controller与
分配/更改角色def change
@role = Role.find(params[:id])
@user = User.find params[:user_id]
# if user is assigned to be a student, delete all other roles
if @role.name == 'student'
@user.roles.each do |role|
@user.roles.delete Role.find(role.id)
end
end
# if user is assigned to be a teacher, delete student (if present)
if @role.name == 'teacher' && @user.has_role?('student')
@user.roles.delete Role.where(name: 'student')
end
@user.roles << @role if request.patch?
@user.roles.delete @role if request.delete?
redirect_to @user
end
控制器有before_action :admin_user
,因此只有管理员可以执行这些操作。另外,我根据角色,登录用户和正确的用户,为不同控制器中的每个角色提供了各种before_actions。这个实现是否需要注意一些可能的安全问题?
答案 0 :(得分:0)
主要优点是他们不是你家的一次性滚动。 CanCanCan和Pundit已被用于数十个应用程序中,并且经过了长时间的战斗测试,并且拥有一个庞大的社区,他们都在努力解决这些问题并将其视为缺陷 - 你能否真诚地说你将为你的解决方案做同样的事情?
CanCanCan和Pundit也是授权库 - 它们可用于构建基于角色的授权 - 但角色不是内置的一部分。
如果你想要一个角色库的gem看看Rolify,那么创建链接到用户和资源的角色非常简单。它可以与CanCanCan,Pundit或任何其他授权库一起使用。