新手问题 做一个作业系统,怎么实现其权限系统?

ethansure · 2012年12月20日 · 最后由 ethansure 回复于 2012年12月20日 · 3721 次阅读

小弟在做一个项目,是一个在线作业系统,学生通过可通过此系统提交作业,查看其它人作业,另外的角色还有助教和老师。之前实现的权限系统是通过 user 里面加了一个 role 的字段来标示用户的身份,但是发现这样拓展性太差。 现在希望能把权限系统优化下,目前我的思路是 user,role,privilege 三张表,1-n,n-n 关系。但是具体对于 privilege 的实现不是很了解,尤其是 activerecord 层的东西。望得到高手指教!

有个 gem 叫 rolify

#2 楼 @Levan #1 楼 @guyanbiao 感谢!如此详细的教程!我正在细读,有问题还可能再次向你们请教!

#2 楼 @Levan 看完了!教程不错!但是我还有一个问题,这些插件只能是控制到资源层,也就是一个 model,但是如果是我的作业其实是在很多课程里面,助教只是有权查看自己管理课程的作业,这样的权限系统怎么去做呢?如果按照现在的方法的话,助教是可以对任何 assignment 进行管理的,那我希望的是在 assignment 进行分级和分组的权限管理

#5 楼 @knwang 抱歉。。现在我是在一个构思设计的阶段- -。。。没有代码。但是我可以把它描述再清楚一点。现在的类主要有 User , Assignment , Course, Attachment. 然后用户里面主要有老师,助教,学生三个角色,当然我希望管理员也可以从系统中添加。那对于作业来说,用户可以查看作业,该门课的助教可以对作业下的资源进行修改。如果采用 cancan rolify 的话,最多只能把权限限制在助教可以管理作业,但是并没有涉及到可以管理某门课的作业(我没想好用这两个插件怎么实现)...

#6 楼 @ethansure

  1. 核心业务逻辑不要用插件
  2. 写借口,写测试,一点点做出来,可以考虑用 service object 把判断逻辑集中
  3. 用 duck typing,关掉的权限 raise exception

抽象的描述只能有抽象的回答。。所以还是先写代码把

#7 楼 @knwang ok! 我们的项目刚开始,你觉得 devise 可以用不?这算核心业务逻辑不?好像不算,但是它会牵扯到核心业务...

#9 楼 @knwang 你是说为什么用 devise 吗?还是项目的需求?devise 用的话,找回密码邮件发送那部分我们就不用自己做了,节省工作量。如果是项目需求的话就是提供给学院一个作业系统,作业的提交,管理,作业分享的功能

找回密码邮件发送那部分我们就不用自己做了,节省工作量

这个做加起来不到二十行代码,不需要加入别人的几千行代码

rolify 也可以把 role 绑定到某个资源上,首页第一个例子就是

user.has_role?(:moderator, Forum.first)

更多例子 add-a-role-to-a-user

cancan 可以加 condition 定义那些资源能够访问,不过规则要么自己静态定义在 ability.rb 里,要么配合 rolify 使用

#12 楼 @doitian 恩,准备自己实现,谢谢

cancan 也是个不错的 gem 包,很多人用它管理权限。

#15 楼 @xiaoronglv 恩,那你觉得 cancan 需要和 rolify 一起使用吗? :)

需要 登录 后方可回复, 如果你还没有账号请 注册新账号