我知道新会员包括"简单角色提供者".
在创建用户时,我找不到与创建用户和分配角色相关的任何帮助.我添加了一个用户,它正确地在DB上创建了表.我看到了AspNetRoles
,AspNetUserRoles
和AspNetUsers
表.
我想要将角色分配给AspNetRoles
用户,在AspNetUsers
该用户中,角色/用户的ID将存储在AspNetUserRoles中.
当我创建用户时,我坚持编程部分的位置以及如何执行此操作.
我有一个下拉列表来选择角色,但是使用Entity CF和新的ASP.NET Identity模型我不知道如何从下拉列表中获取selectedvalue的ID和UserID并分配角色.
ASP.NET MVC允许用户在设计时分配功能(即操作)的权限,就像这样.
[Authorize(Roles = "Administrator,ContentEditor")]
public ActionResult Foo()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
要实际检查权限,可以在(Razor)视图中使用以下语句:
@if (User.IsInRole("ContentEditor"))
{
<div>This will be visible only to users in the ContentEditor role.</div>
}
Run Code Online (Sandbox Code Playgroud)
此方法的问题是必须在设计时设置所有权限并将其指定为属性.(属性与DLL编译所以我目前知道任何机制的应用属性(以允许额外的权限),如[授权(角色="管理员,ContentEditor")]在运行时.
在我们的用例中,客户端需要能够在部署后更改用户拥有哪些权限.
例如,客户端可能希望允许ContentEditor
角色中的用户编辑特定类型的某些内容.可能不允许用户编辑查找表值,但现在客户端希望允许此操作而不授予用户下一个更高角色的所有权限.相反,客户端只想修改用户当前角色可用的权限.
有哪些策略可用于允许在属性之外(如在数据库中)定义MVC控制器/视图/动作的权限,并在运行时进行评估和应用?
如果可能,我们非常希望尽可能地坚持ASP.NET成员资格和角色提供程序功能,以便我们可以继续利用它提供的其他好处.
提前感谢您的任何想法或见解.
asp.net asp.net-mvc asp.net-membership asp.net-roles asp.net-mvc-3
在更新实体框架中的dll之前,我能够做到这一点
user.Roles.Where(r => r.Role.Name == "Admin").FisrtOrDefault();
Run Code Online (Sandbox Code Playgroud)
现在,我只能做r.RoleId,我无法找到一种方法来检索thar Role Id的名称.我在我的控制器和AuthorizeAttribute类中使用它.
有人可以帮我吗?
问候
有很多关于设置asp.net成员资格,角色提供者等的问题(和信息).您是否应该使用microsoft提供的内置平台,或者角色扩展您自己的基类和角色.
我决定扩展默认提供程序并实现我自己的成员资格和角色提供程序.现在我的问题,特别是围绕角色身份验证.
传统上,您可以创建角色,例如"经理,管理员,员工,超级用户"或任何您拥有的角色.但是对于我认为是更精细控制的权限,您应该/应该做什么?让我详细说明......
在我的asp.net mvc网站中,我有不同的领域,如管理,管理,消息传递,报告等.我会为"管理员","经理","报告者"等各个角色创建角色.如果没有相应的角色,您可以无法访问该网站的该区域.所以我会在类级别锁定整个控制器.
但现在以一个地区为例; 消息,并说我想为CRUD获得更好的谷物权限; 创建消息,查看/阅读消息,编辑消息,删除消息等.
最后我的问题.如何实现这种更精细的控制?我看到的一种方法(不确定它是否是一个好方法),就是为所有东西创建asp.net成员角色.所以我可能......
Messenger(广义级角色),CreateMessage,ReadMessage,EditMessage,DeleteMessage.
一方面,我希望一些用户能够阅读/查看消息.但不一定要创建或删除它们.单个控制器操作可以应用特定角色.
你觉得这种方法有什么问题吗?你有更好的主意吗?
迄今解决方案
我决定创建自己的架构并实现自定义成员资格和角色提供程序.我的架构包括;
将在第二天或第二天离开,但是当我有机会时会更新更多信息.
asp.net-mvc asp.net-membership asp.net-authentication asp.net-roles
我希望列出在我的网站上注册的所有用户及其角色.
Id | 名称| 角色
1 | ABC | 管理员
2 | DEF | 用户
像这样的东西,我已经制作了Roles控制器,其中列出了所有角色.
public ActionResult Index()
{
var roles = context.Roles.ToList();
return View(roles);
}
Run Code Online (Sandbox Code Playgroud)
在视图中
@model IEnumerable<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>
@{
ViewBag.Title = "Index";
}
<div>
@foreach (var role in Model)
{
<p>
<strong>@role.Name | </strong>
</p>
}
</div>
Run Code Online (Sandbox Code Playgroud)
这将列出所有角色,但我希望用户的列表及其角色.
请给出任何解决方案,谢谢
首先,我知道这个问题:MVC 5 AddToRole需要在它运行之前注销吗?
而这一个:什么是ASP.NET Identity的IUserSecurityStampStore <TUser>接口?
所以请不要将其标记为副本.
我正在尝试将另一个用户添加到角色中(即我们添加到该角色的用户不是当前用户.如果是,则我链接到的第一个问题的答案就足够了.)
像这样:
IdentityResult result = await userManager.AddToRoleAsync(userID, roleName);
Run Code Online (Sandbox Code Playgroud)
我正在做的两种情况是:从管理页面,当前用户是管理员; 以及基本身份验证保护的webhook(根本没有当前用户).
问题:如果此更改适用的用户已登录并使用该应用程序,我需要立即应用"添加到角色"更改.他们不应该退出并再次进行更改,而且需要立即进行.
感谢大家.
编辑:顺便说一下,User.IsInRole(roleName)要求注销和登录以反映被添加到新角色.UserManager.IsInRole(userID,roleName)没有,因为(我假设)它直接进入数据库表进行检查.但是如果用户点击了一个以他们刚刚添加的角色担保的动作方法,他们仍然需要再次登录,这是公平的.如果有办法解决这个问题仍然很好奇.
编辑:下面是授权属性的源代码:https://github.com/ASP-NET-MVC/aspnetwebstack/blob/4e40cdef9c8a8226685f95ef03b746bc8322aa92/src/System.Web.Mvc/AuthorizeAttribute.cs
它使用User.IsInRole,这本质上是我们需要再次登录的原因.似乎覆盖的方法是AuthorizeCore(HttpContextBase httpContext).我现在不是很勇敢或者不够好,但是如果你想要有很多人会发现这很有帮助.
我是asp.mvc的新手.我正在尝试开发一个维护员工数据的门户.在我的系统中,只有"经理"才能创建员工.如何在管理员登录时启用链接,并在员工登录时禁用.谢谢
我的看法
@model IEnumerable<SealManagementPortal_3._0.Models.VOC_CUSTODIAN>
@{
ViewBag.Title = "List of Custodians";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<script type="text/javascript">
jQuery(document).ready(function () {
jQuery("#list2").jqGrid({
url: '@Url.Action("GridData", "Custodian")',
datatype: 'json',
mtype: 'GET',
colNames: ['Agent ID', 'Branch', 'Unique ID', 'Custodian Name', /*'NRIC No', 'E-Mail', 'Contact No', 'Mobile No',*/'Role', 'Details', 'Edit', 'Delete'],
colModel: [
{ name: 'Agent ID', index: '', width: 10, align: 'left' },
{ name: 'Branch', index: '', width: 10, align: 'left' },
{ name: 'Unique ID', index: '', width: 10, align: …
Run Code Online (Sandbox Code Playgroud) 我有一个受[Authorize]
属性保护的控制器.
这非常好(如果我没有登录,我会被发回登录),但是我希望为这个属性添加一些角色,我已经读过它可能做的事情[Authorize(Roles = "Customer"]
,但当我这样做时,我立即发送回到我的应用程序的登录页面?
此Roles
覆盖不适用于新的ASP.NET标识吗?在我的用户创建中,我通过以下代码将用户添加到:
var user = new ApplicationUser {UserName = model.Username};
var result = UserManager.Create(user, model.Password);
if (result.Succeeded)
{
UserManager.AddToRole(user.Id, "Customer");
SignIn(user, false);
return RedirectToAction("Done");
}
Run Code Online (Sandbox Code Playgroud)
并且根据数据库,用户处于此角色.为什么这不起作用?我错过了配置还是某种?
我正在尝试获取应用程序中所有角色的列表.我查看了以下帖子获取所有用户...和其他来源.这是我的代码,我认为是我应该做的.
var roleStore = new RoleStore<IdentityRole>(context)
var roleMngr = new RoleManager<IdentityRole>(roleStore);
List<string> roles = roleMngr.Roles.ToList();
Run Code Online (Sandbox Code Playgroud)
不过,我发现了以下错误:无法隐式转换类型GenericList(IdentityRole)
来List(string)
.有什么建议?我正在尝试获取列表,以便我可以在注册页面上填充下拉列表,以将用户分配给特定角色.使用ASPNet 4.5和身份框架2(我认为).
PS我也尝试过Roles.GetAllRoles方法但没有成功.
我在一个位在ASP.NET MVC与实施角色绑定5.我试图登录为不具有访问我试图达到应用领域所需的角色的用户.我在这种情况下的期望是,我再次被重定向到登录页面,直到我输入一组有访问权限的凭据或我导航到应用程序的另一个区域.
实际发生的是应用程序似乎进入登录重定向循环,调试通过显示多次调用Login操作.
这是登录操作:
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
Run Code Online (Sandbox Code Playgroud)
这会导致IIS生成错误:
HTTP Error 404.15 - Not Found
The request filtering module is configured to deny a request where the query string is too long.
Run Code Online (Sandbox Code Playgroud)
查询字符串如下所示:
http://localhost/MyApplication/Account/Login?ReturnUrl=%2FMyApplication%2FAccount%2FLogin%3FReturnUrl%3D%252FMyApplication%252FAccount%252FLogin%253FReturnUrl%253D%25252FMyApplication%25252FAccount%25252FLogin%25253FReturnUrl%25253D%2525252FMyApplication%2525252FAccount%2525252FLogin%2525253FReturnUrl%2525253D%252525252FMyApplication%252525252FAccount%252525252FLogin%252525253FReturnUrl%252525253D%25252525252FMyApplication%25252525252FAccount%25252525252FLogin%25252525253FReturnUrl%25252525253D%2525252525252FMyApplication%2525252525252FAccount%2525252525252FLogin%2525252525253FReturnUrl%2525252525253D%252525252525252FMyApplication%252525252525252FAccount%252525252525252FLogin%252525252525253FReturnUrl%252525252525253D%25252525252525252FMyApplication%25252525252525252FAccount%25252525252525252FLogin%25252525252525253FReturnUrl%25252525252525253D%2525252525252525252FMyApplication%2525252525252525252FAccount%2525252525252525252FLogin%2525252525252525253FReturnUrl%2525252525252525253D%252525252525252525252FMyApplication%252525252525252525252FAccount%252525252525252525252FLogin%252525252525252525253FReturnUrl%252525252525252525253D%25252525252525252525252FMyApplication%25252525252525252525252FAccount%25252525252525252525252FLogin%25252525252525252525253FReturnUrl%25252525252525252525253D%2525252525252525252525252FMyApplication%2525252525252525252525252FAccount%2525252525252525252525252FLogin%2525252525252525252525253FReturnUrl%2525252525252525252525253D%252525252525252525252525252FMyApplication%252525252525252525252525252FAccount%252525252525252525252525252FLogin%252525252525252525252525253FReturnUrl%252525252525252525252525253D%25252525252525252525252525252FMyApplication%25252525252525252525252525252FAccount%25252525252525252525252525252FLogin%25252525252525252525252525253FReturnUrl%25252525252525252525252525253D%2525252525252525252525252525252FMyApplication%2525252525252525252525252525252FAccount%2525252525252525252525252525252FLogin%2525252525252525252525252525253FReturnUrl%2525252525252525252525252525253D%252525252525252525252525252525252FMyApplication%252525252525252525252525252525252F
Run Code Online (Sandbox Code Playgroud)
我从一个有效的解决方案(尽管没有基于角色的授权)到我当前破碎的情况所做的唯一改变是在成功登录时重定向到的控制器上面添加了以下内容:
[Authorize(Roles = "Staff")]
Run Code Online (Sandbox Code Playgroud)
正如我之前所说,我登录的用户不是这个角色,但我希望在没有循环的情况下,理智,单一重定向到Login.
编辑:请求bu @dima,通过过滤器应用授权的详细信息......我有以下内容:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new AuthorizeAttribute());
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我已经使用和不使用此行测试了应用程序,并且重定向循环继续有增无减.
asp.net-mvc authorize-attribute asp.net-roles asp.net-identity