解决菜单的多种访问条件?

时间:2010-07-12 15:59:59

标签: php oracle permissions menu

我正在实施多级选项卡式/下拉式菜单导航设置的权限。与在if语句中包装每个菜单项相比,是否有更好的方法来实现权限?

用户权限存储在表格中并被拉入数组,有10个菜单项,每个菜单项都有许多子菜单项。例如,我在数据库中有20个不同的列,它们是布尔标志,用于指示对特定菜单项的访问。

Home
Admin -----> Users
             Notices
             Setup
Projects --> Active Projects
             Inactive Projects
             Updates
Reports
Preferences
Research --> Open Tickets
             Closed Tickets
             Unassigned

理想情况下,我希望每个菜单项都有一个标志,用于确定个人帐户是否有权访问该部分。唯一可以解决这个问题的方法就是将每个菜单项包装在一个if条件中,但这样就可以让它听起来很快就会变得难以管理。

我并不关心性能,因为生成的菜单在创建时被缓存(并且每次引用的缓存版本除非检测到用户权限已从缓存版本更改 - 否则会生成新菜单)。 / p>

1 个答案:

答案 0 :(得分:0)

我的每个菜单项都没有,但表中的每个菜单项都有,如下所示:

create table menu_access 
   (userid varchar2(30),
    menuid integer, 
    access_flag integer,
    primary key (username, menuid)
   );

然后你会插入如下数据:

insert into menu_access (username, menuid, access_flag) values ('TONY', 123, 1);
insert into menu_access (username, menuid, access_flag) values ('TONY', 456, 1);
insert into menu_access (username, menuid, access_flag) values ('TONY', 789, 0);

(另一种方法是完全省略access_flag列,只存储用户有权访问的菜单项的行。)

这样,显示每个菜单项的条件将是相同的,只是为menuid绑定不同的值。您也可以通过选择用户有权访问的所有行并相应地构建菜单来生成菜单。