WebApi Odata,根据用户角色限制几列

时间:2015-08-10 19:57:31

标签: odata asp.net-web-api2

我有多个角色可以访问我的odata服务,根据角色,我需要隐藏几列。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

  1. 自定义DefaultODataSerializerProvider。

    public override ODataSerializer GetODataPayloadSerializer(IEdmModel model, Type type, HttpRequestMessage request)
    

    覆盖GetODataPayloadSerializer方法,通过请求获取角色,将其存储在客户序列化程序中,返回客户序列化程序。

  2. 如果您返回实体,请自定义ODataEntityTypeSerializer

    public override ODataEntry CreateEntry(SelectExpandNode selectExpandNode, EntityInstanceContext entityInstanceContext)
    
  3. 覆盖CreateEntry方法,通过角色删除属性。像:

                var idProp = selectExpandNode.SelectedStructuralProperties.FirstOrDefault(p => p.Name == "Id");
                if (idProp != null)
                {
                    selectExpandNode.SelectedStructuralProperties.Remove(idProp);
                }
                ODataEntry entry = base.CreateEntry(selectExpandNode, entityInstanceContext);
                return entry;