我正在设计一个网站,它能够登录。当有人登录时,有时需要知道他们所在的组。具体来说,他们是否在{{1组。目前,我有一个MySQL存储过程officer
,其中BOOL is_officer(INT id)
是用户ID号。
我的问题:在我的库id
中创建一个PHP函数是明智的,它使用(bool) is_officer()
并调用MySQL存储过程?
接下来,制作一个页面$_SESSION['id']
是明智的,它会在PHP中调用该函数,而该函数又调用MySQL存储过程,以防我需要(不安全地)知道用户是否是官员在飞行中?
(最后一个是制作一个JS函数/ajax/is_officer.php
,它会向is_officer()
发送一个AJAX请求。
tl; dr:在许多语言中使用相同的函数名称,一个调用另一个函数名称,越来越接近数据库 - 好主意还是坏主意?
我基本上是在这里寻求你的指导 - 这是一种公共的yay / nay投票。这是否符合您过去看到的任何设计模式?
答案 0 :(得分:3)
这似乎太过专业化了。通过这种方法,您最终将在各个级别上为每个微不足道的信息累积一组函数。此外,对数据库进行往返很快就会变得非常浪费。
我更喜欢在会话中存储有关登录用户的相关信息。有点像这样:
if (/* user logged in successfully */) {
$user = $Db->getUserInfo($id);
// $user = array('id' => 1, 'name' => 'Foo', 'officer' => true, ...)
$_SESSION['user'] = $user;
}
每当您需要知道用户是否为高级职员时,您只需检查$_SESSION['user']['officer']
。
答案 1 :(得分:1)
成功登录后,您可以将is_officer
的值发送到网页,并在那里设置cookie。这样,每次要检查用户是否为管理员时,您都不必进行服务器调用。
仅根据用户是否为官员,使用此cookie值进行客户端自定义(如UI修改);当请求到达服务器时,请确认该请求实际上是来自使用php / mysql-stored过程的人员。永远不要相信从客户端发送的数据 - 它可以被操纵。