我是codeigniter的新手,在这一点上几乎所有的东西,但我已经取得了一些成功的感觉我的方式围绕php,mysql,ci和web应用程序开发。虽然,我现在有点卡住了。所以,我想把它扔到那里以获得你对我想要做的事情的看法,希望 - 你可以有耐心去理解我的问题并找到解决方案,因为我会尽我所能给你所有细节。
首先,我正在开发一个Web应用程序,以帮助简化某个组织的出勤记录。我创建了一个成员表来保存组织的所有成员,一个登录表,用于保存在组织中担任角色的成员的用户名和密码,一个角色表,用于包含组织中保存的角色,最后是member_role表用于说明在组织中可能具有多个角色的任何成员。 (当然还有一个出勤表,有成员的外键,但这不在我当前的问题之内)。
MySQL代码仅包含相关表:memeber,login,role和member_role。
<!-- language: lang-mysql -->
CREATE TABLE `member` (
`id` int(10) NOT NULL auto_increment,
`fname` varchar(32) NOT NULL,
`lname` varchar(32) NOT NULL,
...
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `login` (
`memberid` int(10) NOT NULL,
`username` varchar(32) NOT NULL,
`password` varchar(32) NOT NULL,
FOREIGN KEY (`memberid`) REFERENCES member(`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `role` (
`id` integer(10) NOT NULL auto_increment,
`role` varchar(32) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `member_role` (
`memberid` integer(10),
`roleid` integer(10),
`active` char(1) NOT NULL,
FOREIGN KEY (`memberid`) REFERENCES member(`id`),
FOREIGN KEY (`roleid`) REFERENCES role(`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
到目前为止,我认为我在为此目的定义数据库方面做得非常好。你在这里的意见会很好,因为我是新手,我只知道新手会知道什么。
这是我目前遇到的真正问题。我创建了一个有两个角色的用户。我把它妥善地存储到会话中,这是一个特定成员角色的数组。会话数组返回,roleid 1和roleid 3。
假设我为每个roleid分配了某些按钮或功能。对于memeberid = 1,我已经为他分配了roleid = 1和roleid = 3,因此我只想构建一个页面,其中只包含roleid = 1和roleid = 3可用的函数。有意义吗?
这就是我被困住的地方,我有阵列,但不知道如何为用户构建页面。我应该将代码放入控制器或视图吗?无论哪种方式,我不知道如何填充一个只有关于roleid = 1和roleid = 3的按钮页面。嗯,我希望你能理解,因为这是最好的,我认为我可以说清楚。 / p>
如果你明白了,也许你可以举一个例子说明我能做到这一点的方式。
感谢您的时间。
答案 0 :(得分:0)
在您尝试重新发明轮子之前的建议...... 如果您正在尝试构建一个hrm应用程序,请使用orangehrm并根据您自己的需要进行工作。
否则使用此
foreach($rolesarray as $currentrole)
{
//if currentrole is x then do that, if y then do different.
}
您可以在需要显示多个按钮,显示等的任何地方使用它
答案 1 :(得分:0)
这些表对我来说似乎很好,除了我想知道你为什么要分离成员和登录表。 Login中的列似乎只是每个成员记录的附加属性,在这种情况下,表可以合并为一个。
关于为属于第1组和第3组的人显示正确按钮的问题 - 我认为你因为想要为这个组合的人创建一个静态页面而陷入困境(也许我是错误..?)。相反,您创建一个每个人都去的页面,并在权限是一个因素的页面的相应区域,您放置if语句来确定是否逐个显示任何给定的元素。例如,只要成员属于至少一个组,您就会进入“开始时间”按钮并显示逻辑。然后,您将进入“管理仪表板”并仅显示成员是否具有组3(如果不是,您将跳过控制器和视图中的元素)。我希望我能正确理解你的问题。
关于是否检查Controller或View中的权限,MVC的精神是在Controller中执行这种逻辑。然后,在视图中,您将检查控制器是否为页面的某些区域准备了信息。如果视图不需要控制器准备的任何特定内容来显示元素(即,您不需要任何准备显示管理仪表板的链接/按钮的任何内容 - 您只需要知道该人是否在第3组中),你可以让控制器设置一个像$ display_management_db_button。
这样的变量最后,用户身份验证在任何Web应用程序中都是非常常见的,并且CodeIgniter包确实存在用于用户身份验证。我最近遇到了Ion Auth,它似乎是我正在寻找的轻量级和强大的合适组合,但你可以搜索并找到许多其他的。
-GUS
(编辑) 例如:
在控制器中:
if($this->member->has_group(3)) { $display_management_db_button=true; }
else { $display_management_db_button=false; }
$data = array('display_management_db_button' => $display_management_db_button;);
$this->load->view('time_screen', $data);
在视图中:
if($display_management_db_button) { echo '<input type="button" ... />'; }
所以逻辑仍然在控制器中。随着程序变得越来越复杂,分离逻辑对于维护干净的代码变得更加重要。