I've always thought groups were better than access levels, but either way is fine.
At the top of each secure page, just put the access level:
// This trick makes sure an included page doesn't accidentally
// decrease the page access level.
$page_access_level = max(@$page_access_level, 10);
Then a simple query:
select * from `access_table` where `user_id` = 'usernamehere' and `access_level` >= '$page_access_level';