再来讨论个问题,最简单的权限问题。

codeartisan 2009-04-07 08:05:40
个人博客里很简单的两种角色:游客和主人。不考虑多用户。

对一个页面,不同的权限显示的内容稍有不同,比如一个文章的页面,主人可以看见文章内容、评论以及其它任何游客能看见的东西,但主人还可以看见“删除”、“编辑”这些链接。这种情况是维护2个页面,还是在同一个页面里写逻辑判断?或者是用其它什么办法?

我这现在有3种解决办法:
1、每个页面里写逻辑,判断当前浏览者是否主人,如果是,则显示“删除”、“修改”的链接;反之则不显示。
2、做两个模板(show.html.erb和show_4admin.html.erb),把其中相同的部分(比如文章内容、评论内容等)抽取出来,做为局部模板。在渲染模板的时候做判断(也就是在action里写判断逻辑),选择show还是show_4admin。
3、有人提到用JavaScript来控制链接的显示,我自己觉得这种方法不太可取,没有多去考虑。

我目前用的是第2种方法,但这有些问题:
1)在action里写权限逻辑合适不合适?有没有类似Spring AOP的解决方案?

2)这个问题有关REST,REST不提倡通过HTTP的POST、GET、PUT、和DELETE以外的方法来指定action,但在这里,游客还好办,直接format.html,连render都不用写。如果是博客主人,这时候show_4admin这个名字跟show这个action对不上,不是又得像这样 format.html render(:action => 'show_4admin')显式指定action了吗?或者用 :template => 'blogs/show_4admin',这也一样。
...全文
65 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Steve 2009-04-08
  • 打赏
  • 举报
回复
第四种方法:custome tag
<%=link_to "编辑", :action=>:edit%>

在你自己写的plugin里,加上:
ActionView::Helpers::UrlHelper.class_eval do
alias :old_link_to :link_to

def link_to(name, options = {}, html_options = nil, *parameters_for_method_reference)
nolink_text = html_options.delete(:nolink_text) if html_options
if role_check(options)
old_link_to(name, options, html_options, *parameters_for_method_reference)
elsif nolink_text
return name
end
end
end

role_check检查有没有权限.
这样你写view的时候,压根不用去考虑权限问题.
codeartisan 2009-04-08
  • 打赏
  • 举报
回复
这种方法似乎不错。runffer_yang把ruby玩得很溜,哈哈。
rails有link_to_if这么个方法,估计就是像你这样实现的吧。但最后还会留下个name,我只是不想让那个name显示在那。嗯,我可以试试你的方法,谢谢了!
taito 2009-04-08
  • 打赏
  • 举报
回复
依我看呢,你可以不用考虑的这么复杂。如果是简单的局部权限不同显示不同内容,可以在页面中写逻辑。如果是整个页面都有非常大的变化,用你说的第二种方法也是可以的。

这方面我是综合了很多“XX大师”写的一些程序,他们也是如此处理的。毕竟敏捷开发,讲究的是效率,任何方法都没有完美的,有利肯定有弊,关键看你是用做什么了,只要你的逻辑不混乱,不要把简单的做复杂了,程序一样写的漂亮而且速度快。不知道说的是不是有根据,但我想借鉴前辈的经验应该也是一种不错的选择。
免费试听地址:B站搜索JeeGit观看《JeeSite4.x数据权限教程》、《JeeSite1.2.7系列基础教程》、《JeeSite4.x系列基础教程》等相关课程! 郑重声明:购课前,请认真听完第一章 课程简介 建议实战人群直接听:第九章、第十章 学生人群、刚入门:全听       数据权限主要讲解内容包含第一章 课程简介31.1 课程目标31.2 适用人群31.3 课程简介31.4 环境要求31.5 课程知识点大全31.6 课程售价31.7 购课声明31.8 资源清单31.9 售后方式41.10 讲师介绍4第二章 权限基础42.1 权限模型概述4第三章 JeeSite权限管理模型123.1 JeeSite1.2.7 权限管理模型123.2 JeeSite4.x 权限管理模型123.3 JeeSite4.x权限设计的扩展13第四章 用户管理144.1 JeeSite4.x内置用户类型144.1.1 用户管理思路144.1.2 网站会员、员工、单位、个人登录视图配置154.2 用户数据权限类型164.3实战训练、调试、日志查看16第五章 机构管理16第六章 角色管理186.1 JeeSite4.x角色管理概述186.2 JeeSite4.x越级授权与菜单权重186.3 JeeSite4.x 越级授权可能存在的隐患极其解决方案196.4用户表如何区分非管理员、系统管理员、二级管理员206.5 角色权限注意事项206.6 角色授权数据范围使用注意事项216.7 为何用户不设置员工权限无效?236.8 岗位管理与角色分类的岗位分类与角色分类有何区别?23第七章 二级管理员23第八章 系统管理员238.1 系统管理员238.2 总结:何时使用超级管理员、系统管理员、二级管理员?23第九章 Jeesite数据权限调用239.1 JeeSite4.x数据调用基础239.2 JeeSite4.x 实现数据列权限推荐解决方案249.3多数源模式下数据权限bug简易解决方案249.4 JeeSite4.x 自定义扩展数据权限249.5支持全球地区、全球企业、全球机构、全球部门授权24第十章 JeeSite数据权限实战2410.1 案例一2410.2 案例二2410.3 案例三2510.4 案例四2510.5 案例五25第十一章 JeeSite4.x常见问题解答251.1数据权限管理的代码会公开吗,购买了能看吗?251.2 JeeSite数据权限教程是Thinkgem录制的吗?25第十二章 参考阅读2612.1、JeeSite官方文档2712.2、美国国家标准与技术研究院2712.3、中国国家标准化管理委员会2712.4、ITSEC欧洲安全评价标准2812.5、百度学术2812.6、开源框架2912.6.1 JeeSite2912.6.2 Casbin2912.6.3 Eladmin2912.6.4 Spring-boot-demo2912.6.5 Jeeplatform3012.6.6 Pig3012.6.7 Jeecg-boot3012.6.8 Jfinal3012.6.9 Guns3112.6.10 Zheng3112.6.11 Cloud-Platform3112.7 博文资源31

2,763

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ruby/Rails
社区管理员
  • Ruby/Rails社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧