我有一个非常典型的情况.我们有一个名为Users的表,它有一个名为Branches(varchar 1000)的列.
该组织可以拥有1000个分支机构.因此,如果用户有权访问分支1,5和10,则分支字符串将如下所示:
1000100001000000000 ......
(即,根据分支的编号,用户具有分支访问权限的位置为1).请不要建议更好的数据存储选项,这是从遍布各大洲的遗留应用程序中找到的.
现在给出了这个背景(考虑到可以有> 10000个用户),我想搜索有权访问任何一组给定分支的所有用户,例如查找有权访问任何一个分支的所有用户10,65,90或125.
一个简单的解决方案是将所需的分支集(即10,65,90,125)转换为分支字符串(00000010100等),然后使用标量UDF迭代两个分支字符串并在第一次匹配出现时返回true 2个分支字符串有1个,如果在公共位置没有1,则为false.
除此之外,我还可以选择在C#中搜索应用程序.其中一些用户具有特权(大约1000或更多),并且他们的数据在应用程序中缓存,因为它经常被访问.但对于没有特权的其他用户,数据仅在db中.
我在这里有两个问题:1)对于数据库搜索,除了我提到的UDF方法之外,还有更好的方法.2)对于特权用户,在性能方面更好,在应用程序中搜索(进一步可以基于UDF中的分支字符串上的for循环,或者作为2个分支数组上的Linq Intersect运算符,即Linq Intersect在[1,5,9,50,80,200]和[6,90,256,300]等.)数据库搜索会产生更快的结果还是基于应用程序的搜索?
考虑在这两种情况下可能还有其他搜索参数,例如,姓氏以.开头.
我目前的方法是首先在其他参数(如Last name starts with)上为这两种情况过滤db中的行.然后使用标量UDF根据分支过滤此结果集,然后返回结果.
请考虑Sql Server中的以下2个语句:
这个使用嵌套子查询:
WITH cte AS
(
SELECT TOP 100 PERCENT *
FROM Segments
ORDER BY InvoiceDetailID, SegmentID
)
SELECT *, ReturnDate =
(SELECT TOP 1 cte.DepartureInfo
FROM cte
WHERE seg.InvoiceDetailID = cte.InvoiceDetailID
AND cte.SegmentID > seg.SegmentID),
DepartureCityCode =
(SELECT TOP 1 cte.DepartureCityCode
FROM cte
WHERE seg.InvoiceDetailID = cte.InvoiceDetailID
AND cte.SegmentID > seg.SegmentID)
FROM Segments seg
Run Code Online (Sandbox Code Playgroud)
这使用OUTER APPLY运算符:
WITH cte AS
(
SELECT TOP 100 PERCENT *
FROM Segments
ORDER BY InvoiceDetailID, SegmentID
)
SELECT seg.*, t.DepartureInfo AS ReturnDate, t.DepartureCityCode …Run Code Online (Sandbox Code Playgroud) 我的问题有两部分.如果我有一个包含10K文档的文档库,并且所有文档都设置为从库中继承权限,该库本身具有包含500个用户的显式ACL(即库不从站点继承安全性),则:
如果1)的答案为否,那么2)的答案可能本身也不是,仍然希望确定并因此单独列出.
这对我们来说很重要的原因是:
请考虑这些sceanrios:
我试图找出一种方法来设置"逻辑"特定数据,这些数据可以在"逻辑"http请求期间一致地访问,即,如果数据是在"BeginExecute"部分中的线程中设置的,那么该异步处理程序您会考虑,即使ASP.NET在不同的OS/.Net线程上执行"EndExecute"部分,该数据也可以在该asnc处理程序的"EndExecute"部分中使用.
此外,我希望在第二个请求被分配给先前分配给第一个http请求的线程的时候,在随后的http请求中,在"BeginExecute"部分中设置的任何OS/.Net线程中的数据都不可用.它位于"BeginExecute"部分,但是当第一个http请求进入异步操作时,该线程被释放(并且它可能仍在完成其异步操作).
我相信.Net中的"逻辑线程"或"逻辑线程上下文"这个词实际上意味着我提到的相同的"逻辑"操作流程(而不是继续重新分配的底层OS/.Net线程).如果从工作流角度来看,每个http请求都是一个新的"逻辑"操作(即使多个用户按顺序或并行调用相同的Web服务,每个请求都是一个新的和部分逻辑操作),并且在此意思是,"逻辑"操作是一次性的,不能重复.但是,相同的底层OS/.Net线程可以根据其可用性到达时映射到"逻辑"操作.
另外,我想将此数据公开为HttpContext.Current类的静态属性.对于某些人来说,这可能会让人感到意外,但如果您使用的是异步.asmx Web服务方法,则HttpContext.Current无法正常工作.我确信我已经阅读了网上的内容,其中说HttpContext.Current应该总是返回正确的HttpContext,但我在.asmx web-methods的EndExecuteMethod中看到它为null.如果有人可以确认我是否正确地做出我的最后陈述,那将是很好的,但这个陈述不是我试图在这里提出的整体问题.
在阅读了大量文献后(例如log4net.ThreadContext和log4net.LogicalThreadContext之间有什么区别?,http://msmvps.com/blogs/jon_skeet/archive/2010/11/08/the-importance-of-context -and-a-question-of-explicitness.aspx,http://blog.stephencleary.com/2013/04/implicit-async-context-asynclocal.html以及更多包括MSDN文档),以下是我的推论:
现在来问题:
一个很长的问题,有很多参考文献,但希望我做得很好,答案也会让其他人受益.
请注意我说的是将我的代码注入SharePoint服务器端(通过包/加载项等),而不是使用Microsoft.SharePoint.dll或通过Web服务访问SharePoint.
所以我的问题是,我需要自定义文档库的工作方式,包括自定义权限管理.我一直在浏览Microsoft.SharePoint.dll分析其工作的内部情况.以下是我的观察:
SPDocumentLibrary提供管理文档库的核心逻辑.但是,它WebPart本身并不是一个.ListViewWebPart或派生类处理.SPPictureLibrary类使我假设可以继承SPDocumentLibrary类以在Document库上提供自定义行为.WebPartAdder.SiteWebPartGalleryProvider在某种程度上连接SPDocumentLibrary到其WebPart内部Microsoft.SharePoint.WebPartPages.WebPartAdder.AddSources方法.现在所有这些都是客户端,这一切都不会发生在SharePoint服务器本身(afaik)上.但是我在SPSecurableObject那个SPDocumentLibrary/ SPList覆盖上看到了可覆盖的方法,具体来说:
CheckPermissionsGetUserEffectivePermissionInfoGetUserEffectivePermissionsEffectiveBasePermissions等我真正想要做的是能够覆盖CheckPermissions/ EffectiveBasePermissions在SPDocumentLibrary内部SharePoint服务器上注入我的自定义逻辑.
我现在将我的研究转移到SharePoint服务器端dll并理解它们.但我希望得到一些关于这是否可行/指向正确方向的专家意见.Microsoft的标志(特别是考虑ASP.NET 2.0/ASP.NET MVC作为基准)是可扩展性/提供者框架.它们为开箱即用的"东西"提供了出色的提供程序,但您可以通过继承/实现某些东西来替换默认提供程序来创建类.所以:
SPDocumentLibrary派生类(服务器端),并将其注入,以便在实例化文档库时,我的类对象被创建(而不是SPDocumentLibrary假设它也是类服务器端.我仍然需要"反映"SharePoint服务器端类).WebPart以使用SharePoint文档库,使其具有本机文档库的感觉,但仍允许我在SPDocumentLibrary访问该Web部件时使用派生类(请再次注意,我所有的讨论都围绕着SharePoint服务器端,即我的代码在SharePoint的地址空间/ w3wp进程中执行.SPSite.EffectiveBasePermissions可言.我的意思是它应该是CSOM,它应该只负责序列化/反序列化由/发送到服务器的内容.但是,我看到这个被覆盖的属性中的精细逻辑围绕着权限推断.我知道这是一个很长的问题,但希望我能很好地完成我的研究.
sharepoint sharepoint-2010 sharepoint-2013 sharepoint-online sharepoint-2016
是否可以将服务器相对虚拟路径转换为PHP中的物理路径?
例如,如果我有一个网址:
/home/index.php
Run Code Online (Sandbox Code Playgroud)
然后从某些其他脚本中找到index.php的物理路径?
.Net IPAddress类GetAddressBytes方法可用于将IPAddress转换为字节数组.
我的问题是我有这些字节数组,如何将它们转换回IPAddress对象,或IP字符串?(对于IPv4和IPv6都有一个解决方案很重要).
我在这方面阅读了大量文献(见下面的链接)。经典与新 Azure 管理门户、角色与应用服务、Azure 网站与 Azure Web 应用的存在只会使问题复杂化。虽然我相信我对这些术语有很好的理解,而后者在上述比较中或多或少是前者的改进后的化身,但文献主要使用这些术语编写,不一定描述新管理中可用的选项门户网站。
所以我真正期待非常清楚的是:
sharepoint ×2
sql-server ×2
.net ×1
asp.net ×1
asynchronous ×1
azure ×1
c# ×1
ip-address ×1
php ×1
rdp ×1
sql ×1
threadstatic ×1