简介:我需要根据URL的查询字符串中存在的数据来授权页面,而不仅仅是页面名称.
背景:
假设我正在建立一个图书馆库存系统.可以在管理员或用户角色中创建用户并将其分配给单个库.同一数据库中有数百个竞争库,因此确保一个库的用户无法查看其他库中的库存非常重要.
现在我正在使用一个非常标准的ASP.NET设置:使用SqlMembershipProvider进行表单身份验证.使用SqlRoleProvider进行授权,通过<authorization>web.config中的部分进行配置.使用SiteMap提供程序进行安全修整以隐藏未经授权的页面.
为了控制库存信息泄漏,我手动检查用户的关联库ID与每个库存查询.它有效,但它很乏味且容易出错.一定有更好的方法.
题:
现在,用户可以在库中创建任意"集合".(例如,集合A中包含书籍1,2和3.)管理员希望能够授予单个集合的管理员/用户访问权限,而不仅仅是整个库.
因此,如果用户访问www.com/Book.aspx?BookId=1,系统需要确保用户在显示页面之前具有"Book 1"所在的集合的权限.如果他们访问www.com/Reviews.aspx?ReviewId=23,我需要确保"评论"适用于他们有权查看的集合中的图书.
1)如何以最标准的ASP.NET方式实现这一点?
在基页中手动检查?
一个自定义的HttpModule?
自定义角色提供程序?
我对如何存储管理员/用户权限不感兴趣,而是根据这些权限授权的方式/位置.
(如何实现任何这些的例子表示赞赏)
2)为了进一步复杂化,我仍然希望安全修整来检查用户是否拥有任何集合或库的管理员权限,如果他没有,则隐藏管理页面.
我有一个包含许多ID的表,每个ID都有许多日期,甚至还有一些没有日期的ID.对于每个ID和日期组合,我想选择ID,日期和与该相同ID相关联的下一个最大日期,如果不存在,则为null.
样本表:
ID Date
1 5/1/10
1 6/1/10
1 7/1/10
2 6/15/10
3 8/15/10
3 8/15/10
4 4/1/10
4 4/15/10
4
Run Code Online (Sandbox Code Playgroud)
期望的输出:
ID Date Next_Date
1 5/1/10 6/1/10
1 6/1/10 7/1/10
1 7/1/10
2 6/15/10
3 8/15/10
3 8/15/10
4 4/1/10 4/15/10
4 4/15/10
Run Code Online (Sandbox Code Playgroud) Which better is using default indy10 that's comes with Delphi 2007 or upgrade it to latest snapshot version and why ?
Thank you
I have a table of data that looks a bit like this:
Name StartTime FinishTime Work
Bob 2010-08-03 08:00:00 2010-08-03 12:00:00 4
Bob 2010-08-03 13:00:00 2010-08-03 16:00:00 3
Pete 2010-08-04 08:00:00 2010-08-04 12:00:00 4
Mark 2010-08-04 10:00:00 2010-08-04 12:00:00 2
Run Code Online (Sandbox Code Playgroud)
None of these date ranges should ever span over midnight.
I want to write SQL that will give me the following output, given an input Start Date of 2010-08-02 and a Finish Date of 2010-08-05
Date Name TotalWork
2010-08-03 Bob …Run Code Online (Sandbox Code Playgroud) 我有一个嵌入式以太网接口(Lantronix XPort),它响应UDP广播及其识别信息.
我能够多播"魔术数据包"并且数据报正确地被监听器接收,但是我还需要找出哪个IP地址发送该响应数据报.如果它是TCP,我会执行socket.RemoteEndPoint,但是当应用于UDP套接字时会引发异常.
public class Program
{
public static void Main(string[] args)
{
// magic packet
byte[] magicPacket = new byte[4] { 0, 0, 0, 0xf6 };
// set up listener for response
Socket sendSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
// EDIT: Also, had to add this to for it to broadcast correctly
sendSocket.EnableBroadcast = true;
IPEndPoint listen_ep = new IPEndPoint(IPAddress.Any, 0);
sendSocket.Bind(listen_ep);
// set up broadcast message
EndPoint send_ep = new IPEndPoint(IPAddress.Parse("192.168.255.255"), 30718);
sendSocket.SendTo(magicPacket, magicPacket.Length, SocketFlags.None, send_ep);
DateTime dtStart …Run Code Online (Sandbox Code Playgroud) 我正在使用ContactsContract api intent来显示活动中的所有联系人.此意图返回联系人的ID.我需要获得此联系人的邮政地址.
这是我用于显示联系人的代码:
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
startActivityForResult(intent, PICK_CONTACT);
我在onActivityResult函数中得到了结果.
请帮忙,我该怎么做.
我看到我的实例和我老板的SSMS实例之间存在一个有趣的行为差异.当他对表使用任务 - >生成脚本...时,它会围绕该表的触发器设置保护(如果存在...)但是当我使用相同的选项执行相同的操作时,SSMS不会将保护放在如果我运行它不止一次生成的脚本,我会收到错误.知道我怎么能让SSMS为我生成触发器的守卫吗?
我希望有一个简单的3列网格,可调整列,MinWidth为80.
代码如下所示:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120" MinWidth="80"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*" MinWidth="80"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="120" MinWidth="80"/>
</Grid.ColumnDefinitions>
<GridSplitter Grid.Column="1" Width="5" HorizontalAlignment="Center" />
<GridSplitter Grid.Column="3" Width="5" HorizontalAlignment="Center" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
但它不能按我想要的方式工作.当分离器被推到左侧时,一切正常.当第二个分离器向右推时,一切正常.但是如果第一个分离器被推到右侧,它会将第3列和第二个分离器推出网格(或使其宽度= 0).
我使用单独的列作为gridsplitters,就像它在msdn示例中所做的那样:
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto" />
<ColumnDefinition/>
</Grid.ColumnDefinitions>
...
<GridSplitter Grid.Column="1"
HorizontalAlignment="Center"
VerticalAlignment="Stretch"
Background="Black"
ShowsPreview="True"
Width="5"
/>
Run Code Online (Sandbox Code Playgroud)
我还将对齐设置为居中,因为我在某处读取了右对齐可能是一个问题并尝试了不同的ResizeBehaviors.
有谁知道,如何解决这个问题,以便始终可见3列宽度至少为80px?
谢谢你的帮助
我有一个简单的ASP.NET 3.5应用程序在IIS7下运行在虚拟目录下.所以我的应用的网址就像是http://example.com/app.我想301将请求重定向到example.com/app/default.aspx到example.com/app以获得更好的SEO.我必须通过代码重定向,而不是通过任何IIS设置.我无法通过本文中提到的代码执行此操作:
http://www.4guysfromrolla.com/articles/072810-1.aspx
代码:
if (request.RawUrl.Equals("/default.aspx"))
{
newUrl = string.Format("{0}://{1}{2}",
request.Url.Scheme,
request.Url.Authority,
request.RawUrl.Remove(request.RawUrl.LastIndexOf("/default.aspx", StringComparison.OrdinalIgnoreCase)));
context.Response.Status = "301 moved permanently";
context.Response.AddHeader("Location", newUrl);
}
Run Code Online (Sandbox Code Playgroud)
当应用程序在虚拟目录下时,似乎进入无限循环.即使在301重定向导致无限循环之后,request.RawUrl属性也总是返回"/default.aspx".我该如何解决这个问题?
谢谢,
阿西夫
我必须将一些XML文件上传到SharePoint库.我必须从不是SharePoint服务器之一的计算机上执行此操作(因此对象模型将无法工作).该库还有一个自定义(整数)列,我必须为上传的文件设置它的值.
如何使用SharePoint 2010的标准WebServices上载文件和值?