背景:MVC2全新。有C#经验,但网络经验有限。
我需要更精细的访问权限而不是简单地为用户分配角色。用户可以在树中的0+点处拥有角色。
/
/Europe
/England
/France
/USA
例如,用户可能是“欧洲”下所有论坛的主持人,并且可以在法国发布新闻。
这两个示例控制器具有以下操作:
ForumController:
public ActionResult DeletePost(int id) { ... }
NewsController:
[HttpPost]
public ActionResult Post(int treeID, ...) { ... }
我该如何处理?从我收集的会员+ RoleProvider无法做到这种级别的细粒度控制。 以前我编写了支持所有这些的自定义用户/角色/身份验证系统,但它与“标准”控件(如LoginView)不兼容。
目标是让角色允许访问,如下所示:
NewsAdmin
添加新闻
编辑新闻
删除新闻
NewsPoster
因此,新闻控制器的Post动作应该检查:用户是否有“添加新闻” - 他试图发布的地址?
我真的想以某种方式使用属性来指定它,所以实际的动作代码可能更干净,只是假设调用者具有适当的访问权。
希望这个问题有道理,我可以在哪里阅读。
(哦,我确定这个问题之前已经在某些变体中得到了解答。我似乎无法找到它。如果您觉得它们可能对阅读有帮助,我不介意单链接回复)
答案 0 :(得分:0)
我认为你过于迅速地解雇角色提供者。如果用户有一个名为NewsAdmin_Europe_AddNews
的角色几乎可以回答这个问题,那不是吗?
一旦您的身份验证方案与角色提供程序一起使用,您需要将其与MVC联系起来。子类型AuthorizeAttribute
并覆盖AuthorizeCore
。 警告:此处的代码必须是线程安全且可重入的。调用base.AuthorizeCore
,然后根据URI /查询测试特定角色(从那时起您将无法获取路由值这可以从缓存中提供,完全绕过MVC)。
这是一些工作,但最终会比尝试重新发明成员资格更安全。