论坛首页 编程语言技术论坛

使用Rails做一个RBAC的权限管理系统(不使用插件)

浏览 8462 次
精华帖 (0) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-08-01  
qichunren 写道
引用
你怎么控制粒度精确到对资源的操作?
如A建立的POSTS,B能看不能删,C是版主,能看有能删


不知道你说的是不是:
你是说对于某个特定的用户创建的资源的权限控制吗?我做的这个不能达到这个要求.

如果只有让B能看不能删posts,让C能看又能删posts,那可以通过我的这个控制.

不知道对于你说的针对某个特定的资源(在我我先暂且理解为table中的一条记录)是如何控制每个用户对其的权限控制,有什么好的方法没有??


我选用 RoleRequirement 这个插件,因为他支持eval一些自定义方法来进行细粒度的判断

class Admin::Listings < ApplicationController
  require_role "contractor"
  require_role "admin", :for => :destroy # don't allow contractors to destroy

  # leverage ruby to prevent contractors from updating listings they don't have access to.
  require_role "admin", :for => :update, [b]:unless => "current_user.authorized_for_listing?(params[:id]) "[/b]  ...
end
"




经过修改,扩展出这种形式的调用:
@user.can_{action}_{controller}?
@user.can_{action}_{controller}?(@target)

以便在View能做更细致的布局

详细可参考以前写的测试例子:
http://www.iteye.com/post/409317
0 请登录后投票
   发表时间:2008-08-01  
这个基本没有实用性, 实现的权限管理要比这复杂得多.
做教科书还可以.
0 请登录后投票
   发表时间:2008-08-01  
年初的时候我用了一个插件,感觉跟楼主这个差不多
activerbac
自己也思考了一下

至于那个控制粒度问题

你怎么控制粒度精确到对资源的操作?
如A建立的POSTS,B能看不能删,C是版主,能看有能删

我觉得也可以实现
应该除destory方法外还有一个destory_by_self方法
一般用户有destory_by_self的权限,而版主有destory权限
或者destory方法只能删除自己的文章,另一个admin_destory可以随便删
就能做到自己的能够删,不能删别人,版主都能删文章的功能
本来逻辑上就可以看成两码事
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics