perl – 从模型中调用Catalyst?

我正在使用
Catalyst
Catalyst::Plugin::Authentication

Catalyst::Plugin::Authorization::Roles,我想知道是否有更好的

将属性添加到我没有看到的模型的方法.

允许每个用户访问一个或多个公司,但有
每次都是一家主要(当前)公司.允许的列表是
存储在数据库中,数据库访问主要通过DBIC.

我的第一个倾向是说用户是有电流的
公司,因而把它作为用户模型的一部分:给用户
打包“子公司{…}”以获取/设置用户的当前公司.该
数据库检查相当容易;只需使用“$self-> search_related”(DBIC
方法,由用户模型继承).

我遇到的问题是:

>目前的公司需要在请求之间坚持,但我宁愿
不要将它存储到数据库(它应该只保留它
会话).自然的地方是会议……
>有一个角色,类似于Unix的根,允许你充当
任何公司,忽略数据库中的列表.检查此角色
可以通过数据库完成,但应用程序中的其他地方都使用
$c-> assert_user_role和朋友.

我听说最好将模型保持为独立于Catalyst的模式
可能.进行模型操作似乎也很奇怪
$C->会议.

当然,我可以将这些检查移动到控制器上,并且具有
model接受控制器发送的任何内容,但这违反了DRY
如果我忘了其中之一,那就是乞求安全问题
检查某处.

有什么建议?或者我只是耸耸肩并继续在模型中做到这一点?

谢谢,并为标题道歉,我无法想出一个好的.

最佳答案 关键是为每个请求创建模型类的实例,然后传入您需要的部分请求.在这种情况下,您可能希望传入基本结果集.您的模型将通过$self-> resultset-> …进行所有数据库调用,并且它将为当前用户“正常工作”. (如果当前用户是root,那么你只需传入$schema-> resultset(“Foo”).如果当前用户是其他人,则传入$schema-> resultset(“Foo”) – > stuff_that_can_be_seen_by($c-> user).您的模型不再关心.)

我有一些幻灯片,但它们已经过时了:

http://www.jrock.us/doqueue-grr/slide95c.html#end

(也请查看之前和之后的内容.)

请注意,受限制的结果集和Web ACL是正交的.你想让模型尽可能地紧密(这样你的应用程序就不会意外地做你不想要的事情,即使代码说的也是这样),但是仍然需要编写各种仅限网络的详细信息访问控制列表. (“你不能查看这个页面.”不同于“你只能删除你自己的对象,而不是每个人都有.”ACL处理第一种情况,受限制的结果集处理第二种情况.即使你写了$rs-&gt ;删除,因为结果集是受限制的,你没有删除数据库中的所有内容.你只删除了你有权删除的东西.方便!)

点赞