我是Laravel的新手,现在学习一周。我有一些我无法找到答案的基本问题。下周我将开始开发CRM系统,我需要一些经验丰富的开发人员提供的信息,他们可以告诉我我正在参与制作一个好的方法。
我需要一些身份验证系统,例如4组用户(Admin,Basic,Manager,Office),其中Manager和Admin将添加Basic用户。视图和功能很少,每个组都可以定义对每个视图和功能的访问权限。几天以来,我一直在寻找包,观看教程和学习。我找到了一个有趣的包,我认为它可以帮助我使用这个用户组权限的东西。包是Sentry。这可以帮助我满足我的要求吗?
例如,我在基本组中有一个用户的情况是什么情况,他删除了例如带按钮的一些评论。在浏览器的左侧,用户可以在悬停链接时看到此评论的链接。例如www.test.com/comments/345/delete,其中id为345.如果用户使用另一个id输入,那意味着他可以删除另一个注释。我找到了一些关于如何解决这个问题的建议,用jQuery和javascript来实现它,这样就不会显示链接,例如用AJAX就可以创建POST。但由于我是一个新手,我在想这需要多少时间,这是一个好方法吗?可以从1.问题包装Sentry帮助我获得每个组可以访问的路由的权限吗?
任何帮助或建议都将不胜感激。
答案 0 :(得分:2)
Sentry做你想做的,是的。 Here's一个问题,其中一些答案解释了权限部分。
可以通过执行 POST 请求而不是 GET 请求来避免可见链接部分。
当您打开表单时,添加方法属性。
Form::open(array('url' => 'foo/bar', 'method' => 'post'))
GET 请求会将参数放在 URL 中,因此显示 ID 。使用 POST 请求会将参数放入标题中,从而将其隐藏在 URL 中。
一个例子可能是删除评论。 GET 请求可能如下所示:
http://www.example.com/comments/delete/1
参数将在方法签名中定义:
public function getDelete ($id) {
Comment::find($id)->delete();
}
POST 等价物的位置
http://www.example.com/comments/delete
参数将在您的Input
课程中定义,您可以使用get
方法获取这些参数
public function postDelete() {
Comment::find(Input::get('id'))->delete();
}
答案 1 :(得分:1)
1)最好的帮助你的包是Sentry。
2)为了确保用户只能删除他的评论你可以做这样的事情(但是你有更多的解决方案是用Ajax做的):
public function destroy($id) {
$user = Sentry::getUser();
$comment = Comment::find($id);
if($comment) {
if($comment->user_id != $user->id) {
return Response::back(); // optional message: Permission denied!
}
$comment->delete();
return Response::back(); // optional with message: Deleted!
}
return Response::back(); // optional message: Comment not found!
}
在这种情况下,您可以使用Sentry来获取登录用户并检查用户ID。我认为您应该让用户始终删除自己的评论,但如果您需要特殊角色(例如管理员)才能删除任何评论或特殊权限 comments.delete (对于某些经理人) - 您也可以使用Sentry:
public function destroy($id) {
$user = Sentry::getUser();
$comment = Comment::find($id);
if($comment) {
if($comment->user_id != $user->id && !$user->hasRole('Admin') && !$user->hasPermission('comments.delete'))) {
return Response::back(); // optional message: Permission denied!
}
$comment->delete();
return Response::back(); // optional with message: Deleted!
}
return Response::back(); // optional message: Comment not found!
}
通过表单请求进行DELETE的更好方法检查: Laravel RESTfull deleting