gpt4 book ai didi

php - Symfony 中用户安全页面的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-04 18:22:37 26 4
gpt4 key购买 nike

我在数据库中有例如表​​:

News:
id | user_id | title | body

和 CRUD:
public function executeIndex(sfWebRequest $request)
public function executeNew(sfWebRequest $request)
public function executeShow(sfWebRequest $request)
public function executeCreate(sfWebRequest $request)
public function executeEdit(sfWebRequest $request)
public function executeUpdate(sfWebRequest $request)
public function executeDelete(sfWebRequest $request)
protected function processForm(sfWebRequest $request, sfForm $form)

确保这一点的最佳方法是什么?
我希望 USER 可以 编辑、更新 删除只拥有 新闻 .
我可以做到这一点 - 获取当前 ID 用户并与来自新闻和下一个重定向的 user_id 进行比较。也许我可以用 preExecute 或 yaml 文件来做这个?

最佳答案

我曾经做过这样的事情。

我选择使用方法 myUser.class.php 扩展用户类(应用程序库目录中的 can($what, Doctrine_Record $with)) ,还声明了几种更新类型,例如: const UPDATE = 'update';和其他人,以同样的方式。

之后在 preExecute()我已检索到当前请求的对象,在您的情况下 - News 对象,并调用 if (!$this->getUser()->can(myUser::UPDATE, $news)) { /* redirect or whatever */ } .

如您所见,它非常易于阅读和维护。

这样您就可以将所有访问逻辑集中在一个方法中 - can() ,您可以在其中指定所需的任何逻辑。

希望,这对你有帮助。

对于您的示例,can()方法类似于:

switch(get_class($with))
{
case 'News':
if ($with->getUserId() != $this->getProfile()->getId()) // Assuming that getProfile() gives me a User class which News record is referenced
{
switch ($what)
{
case self::UPDATE:
return false;
case self::DELETE:
return false;
}
}
else
{
return true; // The user is owner - he can do whatever he want.
}
break;
default:
return false; // or true, don't know what you need
}

关于php - Symfony 中用户安全页面的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10347412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com