只读角色c#mvc
我有一个customroleprovider.cs 我有一个用户表,其中包含用户及其角色。大多数用户都有用户角色,只有3个管理员,现在我需要创建3个只读用户。这些用户只能查看整个网站,不能编辑网站的任何部分。我认为:只读角色c#mvc,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个customroleprovider.cs 我有一个用户表,其中包含用户及其角色。大多数用户都有用户角色,只有3个管理员,现在我需要创建3个只读用户。这些用户只能查看整个网站,不能编辑网站的任何部分。我认为: @{ var simpleRoles = (RoleProvider)Roles.Provider; } @if (simpleRoles.IsUserInRole(User.Identity.Name, "admin")) { } 要限
@{
var simpleRoles = (RoleProvider)Roles.Provider;
}
@if (simpleRoles.IsUserInRole(User.Identity.Name, "admin"))
{
}
要限制某些区域仅用于管理,我是否需要为只读用户提供类似的功能?由于您有管理和用户,您可能需要创建一个“管理”区域和一个“用户”区域。我在下面建议的是,只有当您有一些视图想要隐藏在角色之外时。在管理区域中,您可以向该区域的基本控制器添加authorize属性,以便只有管理员可以更新内容。否则,如果要隐藏角色的不同显示的更新按钮,则必须在视图中使用if语句,这可能会变得混乱 更新: 下面是有关这些领域概述的链接。区域很好,因为您可以创建一个名为“Admin”的区域,在该区域内,您将拥有控制器/视图/视图模型等。。。与不同区域分开的。在此区域内,您可以包含更新内容的逻辑,而如果您不希望角色更新内容,则不要将逻辑包含在其区域内。希望链接能比我解释的更好 当我为我的项目使用区域时,我将创建一个基本控制器,我的所有控制器都从中继承。我的基本控制器的一个示例如下:
[Authorize(Roles="Admin")]
public class AdminBaseController : Controller
{
...
}
然后在我所在区域的所有控制器中,我将继承AdminBaseController,以便只有管理员可以访问网站的此部分
public class HomeController : AdminBaseController
{
...
}
在视图上添加“授权”属性:
例如,如果您只希望管理员查看view.cshtml文件,则可以在控制器操作上执行以下操作:
[Authorize(Roles="admin")]
public ActionResult View()
{
....
}
如果用户不在该角色中,那么他们将能够访问该视图
对于多个角色,您可以执行以下操作:
[Authorize(Roles="admin, user")]
public ActionResult View()
{
...
}
这将允许任何管理员或用户查看该页面。(他们不必同时扮演这两个角色)。详细阐述我的上述评论。用Authorization属性修饰控制器操作将使其锁定到特定角色。这并不能解决只读类型角色的问题。在控制器操作中需要一些逻辑来评估角色,然后返回不同的视图。我建议将其放置在BaseController中。让其他控制器继承它:
public abstract class BaseController : Controller
{
public bool IsReadOnly { get; set; }
public BaseController()
{
this.IsReadOnly = Roles.IsUserInRole("readonly");
}
}
public class HomeController : BaseController
{
[Authorize(Roles = "admin, user, readonly")]
public ActionResult Edit(int id)
{
if (!IsReadOnly)
{
return View("Details");
}
... other stuff
}
}
在.cshtml中试试这个
@if(User.Identity.IsAuthenticated){
if(User.IsInRole(“Admin”)){
@ActionLink(“管理员”、“管理员控制器”)
}
}
我可以添加多个角色吗?管理员和用户?是的,应该是[Authorize(Roles=“admin,user”)]。实际上,让我查一下语法来仔细检查正确的方法。但并不能解决“只读”的问题。您将需要添加一些逻辑来评估用户的角色,然后返回一个不同的视图——肮脏的示例:if(!Roles.IsUsersInRole(“readonly”){返回视图(“Details”,model);}我第一次误读了这个问题。我编辑了我的答案以提出建议。我想指出,在视图中使用@if(){}
隐藏按钮并不能防止有人将post数据发送到控制器并导致操作执行;安全性必须在控制器级别实现。我有一个authorizeadmin控制器,所以我会将它们添加到控制器中。