我有以下代码
if (!UserIsInRole("Owners"))
RegisterControlRule("CreatorID", AccessPermission.Allow, UserId);
请注意代码正在被过滤CreatorID
,这在我的情况下有效。
现在我想添加另一个参数 delegeatedToId
我已经尝试了以下
if (!UserIsInRole("Owners"))
This is skipped >>> RegisterControlRule("CreatorID", AccessPermission.Allow, UserId);
This will runs >>> RegisterControlRule("delegeatedToId", AccessPermission.Allow, UserId);
但只考虑第二个过滤器。
我也尝试了以下(只是一个愚蠢的想法)
RegisterControlRule("CreatorID","delegeatedToId", AccessPermission.Allow, UserId);
附加信息:
伙计们,这是包装
protected override void EnumerateAccessControlRules(string controllerName)
{
base.EnumerateAccessControlRules(controllerName);
if (!UserIsInRole("Administrators"))
{
RegisterControlRule("InstanceID", AccessPermission.Allow, OrganizationID);
RegisterControlRule("RoleID", AccessPermission.Deny, 1);
// let's filter by created by if user is not the owner //CreatedBy
if (!UserIsInRole("Owners"))
RegisterControlRule("CreatorID", AccessPermission.Allow, UserId);
//Second filter
RegisterControlRule("delegeatedToId", AccessPermission.Allow, UserId);
}
}
谢谢你的时间!
在 中C#
,if
语句可以带有或不带有花括号,但有区别。
if(a == b)
a++;
b++;
在上面,a++
仅当条件为真时b++
才会发生,而无论如何都会发生,因为如果条件为 ,则只有紧随其后的行才被if
认为是要做的事情true
。
另一方面,使用花括号可以消除混乱并使事情变得清晰。
if(a == b)
{
a++;
}
b++;
这段代码等同于上面的代码,但没有那么模糊。
在您的情况下,无论if
条件的结果如何,都会发生第二个寄存器,因此我敢打赌,在您的条件为 的情况下,第二个寄存器会覆盖第一个寄存器true
。
即使在您编辑过的帖子之后,仍然不清楚您的预期行为是什么。当if
条件评估为true
(即,如果用户不在角色“所有者”中),您希望两个“注册”操作都发生,还是只发生第一个?
如果您希望条件为真时两个寄存器都发生,请像这样使用它:
if (!UserIsInRole("Owners"))
{
RegisterControlRule("CreatorID", AccessPermission.Allow, UserId);
RegisterControlRule("delegeatedToId", AccessPermission.Allow, UserId);
}
如果您只希望第一个发生,就像这样,但请记住,在这种情况下,无论if
条件的结果如何,第二个都会发生。
if (!UserIsInRole("Owners"))
{
RegisterControlRule("CreatorID", AccessPermission.Allow, UserId);
}
RegisterControlRule("delegeatedToId", AccessPermission.Allow, UserId);
你也没有告诉我们这RegisterControlRule
是什么或它的行为是什么。检查图书馆的文档,看看注册一个规则是否会覆盖以前的规则。在这种情况下,在上述任一示例中,只有最后一条规则将保持注册状态。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句