需要在web开发抽象的所有层中访问相同的布尔结果

时间:2010-06-04 03:55:17

标签: php javascript mysql

我正在设计一个网站,它能够登录。当有人登录时,有时需要知道他们所在的组。具体来说,他们是否在{{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投票。这是否符合您过去看到的任何设计模式?

2 个答案:

答案 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过程的人员。永远不要相信从客户端发送的数据 - 它可以被操纵。