二十四画生的Blog


        ——开始学习Orchard框架
posts - 125, comments - 1456, trackbacks - 46, articles - 8
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

Orchard中的用户、角色及权限

Posted on 2011-08-17 11:20 二十四画生 阅读(...) 评论(...) 编辑 收藏
    Orchard提供了一套管理用户及角色的功能,一个用户可以拥有多种角色,一个角色也可分配给多个用户。一个角色可以拥有多种操作权限,一种操作权限也可赋予多个角色。对一个用户指定不同的角色,他就可以拥有不同的权限了。Orchard判断当前用户是否能进行某种操作,就是判断他是否拥有这种操作的权限。
 

管理用户

管理用户,可以在Orchard后台管理中选择“Users”菜单来进行管理。


 

缺省只有一个用户,就是你安装网站时创建的管理员用户。你可以在这里添加更多新的用户,当然你可以删除、修改或禁用用户。

当你添加一个新的用户时,你需要指定用户名,email和密码,并且还可以同时选择这个用户所拥有的角色。

 

角色定义了一个用户能在网站中进行什么样的操作。换句话说,就是有哪些操作允许他们执行。一个用户的有效权限是集合了他所有角色中的权限。权限仅用做允许用户执行什么样的操作,而不是拒绝他们进行什么样的操作。

 

上面的描述举例来说就是:如果用户A同时拥有注册用户角色和新闻编辑角色,且注册用户角色可以评论新闻和回复评论,新闻编辑角色可以发表新闻。那么用户A就同时拥有评论新闻、回复评论和发表新闻的权限。这就是所谓的“集合了他所有角色中的权限”。但是如果有这种需求:用户A需要拥有回复评论的权限和发表新闻的权限,但是他不能拥有评论新闻的权限。那么在Orchard中只定义注册用户角色和新闻编辑角色,就无法实现这个需求了。因为“权限仅用做允许用户执行什么样的操作,而不是拒绝他们进行什么样的操作”,所以遇到这种情况,只能是重新定义一个新的角色,拥有回复评论权限和发表新闻权限,但是不具有评论新闻权限。不过在一些其他的CMS系统中,是支持拒绝某种权限定义的。比如新版本的DNN(3.X版的DNN也Orchard一样不支持拒绝权限的定义,不过新版本的支持了),就可以设置某一个角色拒绝执行某种操作。这样在配置权限的时候会更灵活一些,不知Orchard在以后的版本中是否会考虑升级这部分的内容。另外DNN在用户角色这一块还有一些很值得借鉴的地方,比如:
  • 角色的订阅:用户可以购买拥有某一角色,比如定义一个VIP角色,可以让用户去购买。
  • 角色有效期:这样就可以实现用户在某一时间段内拥有某一角色,过期自动失效。
  • 角色组:可以对角色进行分组,这个当角色多的时候就非常有用了。

 

管理角色

管理角色,可以在Users界面中的Roles选项卡中配置某一角色所具有的权限,或是添加一些新的角色。
 

 

Orchard默认定义了以下一些角色:
  • Administrator (管理员):拥有所有的权限。
  • Editor (网站编辑):可以管理、修改、发布所有内容。
  • Moderator(版主):可以管理评论和标签,不过不具有其他权限。
  • Author(作者):可以管理、修改、发布自己所创建的内容。
  • Contributor(合作者):可以管理、修改自己所创建的内容,但是不能发布,只能保存为草稿。
  • Anonymous(未登录用户):可以查看前台网站。
  • Authenticated(已登录用户):可以查看前台网站。默认的权限和未登录一样,不过我们自己可以有针对性的调整一下。
 

如果我们需要调整某一角色所拥有的权限,只用编辑一下这个角色,并选择可以执行的权限即可。

 

 

权限介绍

权限就是进行某种操作,比如:管理博客,编辑博客文章等等。有些权限是定义是否允许用户执行某一单一操作,但是还有些权限是定义是否允许用户执行某一组操作。也就是说,高级别的权限可以包含低级别的权限。比如:当你拥有管理博客的权限时候,你当然就拥有编辑博客文章的权限。这样的权限就可称做隐含权限(Implied Permissions)。在编辑角色的画面中,我们可以通过查看“Effective”列来查看当前角色所拥有的隐含权限。

 

 

总结

本文主要介绍了Orchard中内容操作权限控制的基本原理,以及如何使用用户、角色及权限这三者的关系来实现对内容操作权限的控制。通过上文的介绍我们就可以知道,用户和角色都是可以通过后台来管理的,角色和权限也可以通过后台来关联。但是这些权限是如何定义的,在后台中并没有相应的操作。其实这些权限的定义是在模块中实现的,每一个模块都可以定义自己不同的权限。作为模块开发者来说,只用关注什么权限可以执行什么操作就可以了,完全不用考虑当前用户拥有什么角色。换句话说,能否执行某种操作的判断依据是权限,而不是用户和角色,这样的设计能让权限控制更加灵活。关于权限是如何定义的,又如何进行判断的,将在以后的文章中做进一步的介绍。

 

参考文档