用户记录所有权与OctoberCMS& MySQL的

时间:2017-03-20 03:49:42

标签: php mysql laravel laravel-5 octobercms

我使用基于OctoberCMSLaravel和官方User插件。

我正在建立一个前端用户可以上传文件的图库。

用户是其上传文件的所有者,并且是唯一拥有编辑权限的用户。

我的问题,这是设计和处理用户记录所有权的正确方法吗?所有用户上传记录将在一个数据库表mysite_gallery_中混合在一起,并将在html中进行排序并显示过滤器,例如按特定用户名查看所有上传。

这会慢吗?每个用户应该有自己的表吗?它是否足够安全以防止其他用户,机器人或黑客脚本编辑他们不拥有的文件记录?

MySQL表

所有上传记录都保存到表格mysite_gallery_

| id   | username   | filename   | slug     | title     | tags                 |
| ---- | ---------- | ---------- | -------- | --------- | -------------------- |
| 1    | matt       | xyz123     | xyz123   | My File   | space, galaxy, stars | 

记录所有权

在上传时,我的自定义上传组件使用Laravel在文件的titleslugtags等数据库中创建记录。

要定义所有权我有上传组件将用户username保存到记录中。

# Get Current User
$user = '';
if (Auth::check()) {
    $user = Auth::getUser();
    $user = $user->username;
}

# Create Record
$gallery = new Gallery();
$gallery->username = $user;
$gallery->filename = $name;
$gallery->title = $title;
$gallery->slug = $slug;
$gallery->tags = $tags;
$gallery->save();

编辑记录

如果用户想要编辑文件属性(例如标题),Laravel会检查current user是否与记录中的username匹配。如果用户是所有者,则允许编辑。

# Get File Record Owner
$owner = '';
if (Gallery::where('filename', '=', $filename)->exists()) {

    $record = Gallery::where('filename', '=', $filename)->first();
    $owner = $record->username;

}

# Authenticate Current User is Owner
$is_owner = false;
if (Auth::check()) {

    # Get Current User
    $user = Auth::getUser();

    # Check if User is Owner
    if ($user->username == $owner) {
        $is_owner = true;
    }
}

# Edit Record
if ($is_owner == true) {

    # Update Record
    Gallery::where('filename', '=', $filename)->update(['title' => $title]);

    return Redirect::back();
}

1 个答案:

答案 0 :(得分:1)

最好使用用户ID而不是用户名。它在数据库中占用的空间更少,而且速度更快。

此外,我会将标签放在另一个表中。虽然这取决于您如何使用标签。如果你将它们放在另一个表中,那么例如,为标签获取所有上传文件会更容易。