在 sql 下, 方案2更好. 在 mongo 下, 方案1更好.
不知道你的这个项目中有没有用户权限组的概念.
如果有权限组的话, 就是一个权限组的 collection 里面, 每个权限下保存了一个菜单项的数组.
如果没有权限组的话, 就可以按照你说的方案1, 在每个用户表里, 或者单独的用户权限表里, 保存一个菜单数组.
当然, 保存菜单项的 id 数组或许更合适.
mongo 里面数组也是可以建立索引的, 查询也很方便.
另外, 也可以参考 mongo 自身的权限系统, 其权限设置也是保存在 mongo 数据库内的, 通常都是 admin 库下的 users 表. 如果你的 mongo 开启了权限管理, 并且权限库名字就叫 admin, 则可以用以下命令查看:
> use admin
switched to db admin
> show users
{
"_id" : "admin.admin",
"user" : "admin",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
{
"_id" : "admin.migration",
"user" : "migration",
"db" : "admin",
"roles" : [
{
"role" : "backup",
"db" : "admin"
},
{
"role" : "read",
"db" : "local"
},
{
"role" : "read",
"db" : "some_database"
}
]
}
{
"_id" : "admin.sys",
"user" : "sys",
"db" : "admin",
"roles" : [
{
"role" : "__system",
"db" : "admin"
}
]
}
以上输出为示例. 可以看到官方存储权限的方案也是用数组.