目前,我们正在设计一个用户角色和权限系统在我们的Web应用程序(ASP.NET),它似乎是我们有一些情况下是做不适合古典中基于角色的访问控制(RBAC) 。我将发布几个问题,每个问题都针对一个特定案例。这是我的第二个问题(第一个问题在这里:非RBAC用户角色和权限系统:检查用户的City)。
我们有以下情况:我们需要在Web应用程序中实现Manager角色。但是,管理者可以属于一个或多个公司(在我们为其创建此Web应用程序的一大批公司中)。假设有“公司A和B的经理”,“公司C的经理”等。
根据管理者所属的公司,他可以访问某些业务:例如,他只能与他所属的公司的客户进行通信。也就是说,“公司A和B的经理”只能与公司A和B的客户联系,而不能与公司C的联系人联系。他还可以查看公司A和B而不是C的客户的详细信息页面,等等。 。
看来这种情况属于RBAC。但是,事实并非如此。我们将需要创建一个具有Companies属性的ManagerRole类 -也就是说,这不仅是一个权限集合的角色(如在传统的RBAC中一样),而且还有一个具有属性的角色!
这只是具有属性的角色的一个示例。还会有其他角色:例如,管理员角色也将属于许多公司,并且还将具有其他自定义属性。
这意味着我们将建立一个层次结构或角色类:
class Role – base class
class ManagerRole : Role
List Companies
class AdministratorRole : Role
List Companies
Other properties
Run Code Online (Sandbox Code Playgroud)
我们研究了纯RBAC及其在多个系统中的实现,没有发现具有层次结构或角色的系统,每个系统都具有自定义属性。在RBAC中,角色只是权限的集合。
我们可以使用具有属性的权限(例如ManagerPermission,AdministratorPermission)对案例进行建模,但这有很多缺点,主要是我们无法直接向用户分配“公司A和B的经理”这样的角色,但是必须创建一个包含公司A和B的ManagerPermission的角色。此外,从语言的角度来看,“经理”似乎是一个“角色”(在公司中的职位),而不是“权限”。
对此主题的任何想法以及该领域的任何经验将不胜感激!
谢谢。
这有效:
enum TPriority
{
EPriorityIdle = -100,
EPriorityLow = -20,
EPriorityStandard = 0,
EPriorityUserInput = 10,
EPriorityHigh = 20
};
TPriority priority = EPriorityIdle;
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
TPriority priority = -100;
Run Code Online (Sandbox Code Playgroud)
任何原因?
我有一个并行化的自动化脚本,需要调用许多其他脚本,其中一些脚本因为(错误地)等待标准输入或等待各种其他不会发生的事情而挂起.这不是什么大不了的事,因为我抓住那些惊慌失措的人.诀窍是在孩子关闭时关闭那些悬挂的孙子进程.我认为各种各样的咒语SIGCHLD,等待和过程小组都可以做到这一点,但是它们都会阻止而且孙子孙女都没有收获.
我的解决方案有效,但似乎不是正确的解决方案.我对Windows解决方案还不是特别感兴趣,但我最终也需要它.我的只适用于Unix,现在还可以.
我写了一个小脚本,它可以运行同时并行的子节点数和fork的总数:
$ fork_bomb <parallel jobs> <number of forks>
$ fork_bomb 8 500
Run Code Online (Sandbox Code Playgroud)
这可能会在几分钟内达到每用户进程限制.我发现的许多解决方案只是告诉你增加每用户进程限制,但我需要这个运行大约300,000次,所以这不会起作用.同样,重新执行等建议以清除流程表并不是我需要的.我想实际修复问题,而不是在它上面拍打胶带.
我抓取进程表寻找子进程并在处理程序中单独关闭挂起的进程SIGALRM,这需要死掉,因为其余的实际代码在此之后没有成功的希望.从性能角度来看,kludgey爬过进程表并不会让我烦恼,但我不介意不这样做:
use Parallel::ForkManager;
use Proc::ProcessTable;
my $pm = Parallel::ForkManager->new( $ARGV[0] );
my $alarm_sub = sub {
kill 9,
map { $_->{pid} }
grep { $_->{ppid} == $$ }
@{ Proc::ProcessTable->new->table };
die "Alarm rang for $$!\n";
};
foreach ( 0 .. $ARGV[1] )
{
print ".";
print "\n" unless $count++ % 50;
my $pid = $pm->start and next;
local …Run Code Online (Sandbox Code Playgroud) 我正在构建一个Web应用程序(使用原型),需要在DOM中添加大量的HTML.其中大多数是包含具有各种属性的元素的行.
目前,我在变量中保留一行空白的HTML
var blankRow = '<tr><td>'
+'<a href="{LINK}" onclick="someFunc(\'{STRING}\');">{WORD}</a>'
+'</td></tr>';
function insertRow(o) {
newRow = blankRow
.sub('{LINK}',o.link)
.sub('{STRING}',o.string)
.sub('{WORD}',o.word);
$('tbodyElem').insert( newRow );
}
Run Code Online (Sandbox Code Playgroud)
现在一切顺利,花花公子,但这是最好的做法吗?
当我更新页面上的代码时,我必须更新blankRow中的代码,因此插入的新元素是相同的.当我有40行HTML进入blankRow然后我也必须逃避它时,它变得很糟糕.
有没有更简单的方法?我想到了urlencoding,然后在插入之前解码它,但这仍然意味着一个blankRow和许多转义.
什么意思将是PHP等人的eof函数.
$blankRow = <<<EOF
text
text
EOF;
Run Code Online (Sandbox Code Playgroud)
这意味着没有逃脱但它仍然需要一个blankRow.
你在这种情况下做了什么?
在原型中使用DOMBuilder结束.不需要其他库:
$w('a div p span img table thead td th tr tbody tfoot input').each(function(e) {
window['$' + e] = function() {
return new Element(e, arguments[0]);
}
});
newPart = $div({id: 'partition-4'})
.insert( $p()
.insert('<b>Stuff</b>')
)
.insert( $p({
id: 'a-p'})
.insert('<b>More stuff</b>')
);
$('parentDiv').insert(newPart);
Run Code Online (Sandbox Code Playgroud)
见我的解决方案 …
当用户点击登录按钮(index.php)时,我正在调用chechlogin.php,我在这里检查loginId密码为 -
if($count==1)
{
// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("myusername");
session_register("mypassword");
$_SESSION['UserId'] = $myusername;
$_session['SessionId'] = session_id();
header("location:LoggedUser.php");
}
Run Code Online (Sandbox Code Playgroud)
在LiggedUser.php中
<?php session_start(); //starting session
Run Code Online (Sandbox Code Playgroud)
if(!isset($ _ SESSION ['SessionId'])|| $ _SESSION ['SessionId'] ==''){header("location:index.php"); }?>
问题:它总是回到index.php页面,虽然我输入正确的用户名和密码.我认为session_id()工作不正常或??
我有一个包含Java序列化对象的文件,如"Vector".我已将此文件存储在Hadoop分布式文件系统(HDFS)上.现在我打算在map任务中读取这个文件(使用方法readObject).我想
FileInputStream in = new FileInputStream("hdfs/path/to/file");
Run Code Online (Sandbox Code Playgroud)
因为文件存储在HDFS上,所以不会工作.所以我想到了使用org.apache.hadoop.fs.FileSystem类.但不幸的是它没有任何返回FileInputStream的方法.它只有一个返回FSDataInputStream的方法,但我想要一个输入流,它可以读取序列化的java对象,比如文件中的vector,而不仅仅是FSDataInputStream可以做的原始数据类型.
请帮忙!
我知道这个问题有很多答案.但是,我发现它们中没有一个能够真正实现它.
有人认为一个循环(几乎)与强连通组件相同(s.在有向图中查找所有循环),因此可以使用为该目标设计的算法.
有人认为找到一个循环可以通过DFS完成并检查后端(s.文件依赖关系的boost图文档).
我现在想对是否可以通过DFS检测图中的所有循环并检查后沿有一些建议?
http://www.me.utexas.edu/~bard/IP/Handouts/cycles.pdf(在SO上找到)陈述了一种基于循环基础的方法.我个人而言,我觉得它不是很直观,所以我正在寻找一个不同的解决方案.
编辑:我最初的意见显然是错误的.S."Moron"的下一个回答.
初步意见:我的观点是它确实可以这样工作,因为DFS-VISIT(DFS的伪代码)刚刚进入尚未访问过的每个节点.从这个意义上讲,每个顶点都表现出一个潜在的循环开始.此外,由于DFS每次访问每个边缘,因此也会覆盖通向循环起点的每条边.因此,通过使用DFS和后沿检查,确实可以检测图中的所有周期.注意,如果存在具有不同数量的参与者节点的循环(例如,三角形,矩形等),则必须进行额外的工作以区分每个循环的实际"形状".
正如您在gmail中看到的那样,当您单击屏幕右下角时,会出现一个小弹出窗口.有趣的是,即使我们从一个网页导航到另一个网页,这个弹出窗口仍保持打开并处于同一位置.如何才能做到这一点?它看起来不像是不同的页面.它是完全不同的页面吗?还是同一页面?
提前致谢 :).希望这些主持人不要关闭我的问题.上次我问了一些对我有用的东西时,他们对我投了反对,并且关闭了我的问题.
这里的长期潜伏者,终于摆脱了木制品.
基本上,我正在尝试做的是让我的记录器将这样的数据写入日志文件:
Connecting to database . . . Done.
Run Code Online (Sandbox Code Playgroud)
我想要'连接数据库'...'在调用函数时写入,并在函数成功执行后写入'完成'.
我正在使用Python 2.6和日志记录模块.另外,我真的很想避免使用装饰器.非常感激任何的帮助!