【发布时间】:2013-07-20 05:03:25
【问题描述】:
下面是我的数据库表结构
ApplicationModule - ID、密钥、名称
ApplicationFeature - ID、ModuleId、密钥、名称
每个功能都映射到模块。此外,我只需要为租户分配一些功能。
TenantXFeature - TenantId、FeatureId
此外,当我创建角色时,我映射了从租户特定(TenantXFeature)中挑选的一些特征
RoleXFeature - RoleId、FeatureId
现在我需要一个查询来加载所有租户特定的功能以及选择(是/否),如果 RoleXFeature 具有该功能的条目。
SELECT AM.[Key] AS ModuleKey
,AM.Name AS ModuleName
,AF.[Key] AS FeatureKey
,AF.Name FeatureName
,RF.FeatureId
,CASE WHEN RF.FeatureId IS NULL THEN 0 ELSE 1 END AS Selected
FROM TenantXFeature TF
INNER JOIN ApplicationFeature AF
ON TF.FeatureId = AF.Id
INNER JOIN ApplicationModule AM
ON AF.ModuleId = AM.Id
LEFT JOIN RoleXFeature RF
ON RF.FeatureId = AF.Id AND RF.RoleIid = 1
WHERE TF.TenantId = 1
这里RF.FeatureId 总是显示 NULL,即使我在 RoleXFeature 中有一个映射。
请建议/帮助我解决这个问题。
【问题讨论】:
-
你有一个表格来将租户映射到角色吗?
-
@MarkBannister,我没有单独的映射表,但在 ApplicationRole 表中,我们有一个列
TenantId表示角色特定于租户。该列中的NULL值指定它对所有租户都是通用的。
标签: sql sql-server sql-server-2008 sql-server-2005