我正在使用Laravel的预构建Auth代码。我有另一个表提交,看起来像这样
Schema::create( 'submissions', function( Blueprint $table ) {
$table->increments( 'id' );
$table->enum( 'complete', [ 'yes', 'no' ] );
$table->string( 'formName' );
$table->timestamps();
// Reference to User ID but only when submitted by a registered user...
//$table->integer( 'user_id' )->unsigned();
//$table->foreign( 'user_id' )->references( 'id' )->on( 'users' );
$table->integer( 'status_id' )->unsigned();
$table->foreign( 'status_id' )->references( 'id' )->on( 'status' );
});
当注册用户提交时,我想引用该用户ID,但匿名提交是可能的,我需要一些指示,提交是由匿名用户提供的。
我应该吗?还是有更好的方法?
编辑:扩展我的用例
我的应用程序基本上是一组表单(不是全部),供用户输入和更新信息。大多数表单仅限于经过身份验证的用户。经过身份验证和未经身份验证的用户都可以使用2-5个表单。如果表单提交由Authenticated用户完成,我想向管理员表明该用户是谁。如果用户未经过身份验证,那么我只想向管理员表明它是匿名提交。因此,Anon用户不需要任何逻辑,这只是一个标志,用于指示向管理员提交的提交源。那说听起来像user_id上的nullable()键可能是要走的路。
展望未来我正在考虑添加跟踪功能,因此,如果用户提交的内容成为经过身份验证的用户,我可以回溯跟踪并更新其提交内容以指示用户。
由于
答案 0 :(得分:1)
这实际上取决于你系统的其他部分。
例如,像phpBB和Shimmie这样的项目使用真正的Anon用户。但是他们以某种方式将该用户标记为来宾帐户。我认为Shimmie在users表中使用了一个标志(即users.is_guest = 1),并且只是将每个guest虚拟机作为该用户进行身份验证,以进行权限屏蔽。 phpBB我相信寻找具有某个user_type且在某个组内的用户(即users.user_type = 2&& users.groups.contains(1))。同样,phpBB以Anon用户身份验证来宾。
标记该用户的一种简单方法(假设您只有一个非用户用户)是强制将其PK设置为0或-1。它可以节省数据库中的空间,固有地防止重复的“访客”用户,并为您提供一种简单的方法来阻止路由显示该用户(->where('id', '[1-9][0-9]*')
)。
备选方案(没有真实的用户或组)意味着您的授权逻辑需要能够处理未经身份验证的用户。如果没有关于授权逻辑的更多信息,建议会有点困难。
我通常更喜欢使用真实用户或真实群组来传递给我的授权逻辑。它会使代码中的所有内容保持一致,并在UI中为站点管理员提供一个通用界面来更改访客权限。
只需要做一点工作就可以防止人们通过路线访问该用户或者显示在用户列表等中。在您的模型上创建scope以过滤掉非用户用户(您的访客帐户,任何机器人帐户等)可能会有所帮助。