只读角色c#mvc

时间:2013-09-30 18:53:53

标签: c# asp.net-mvc

我有一个customroleprovider.cs 我有一个用户表,其中包含用户及其角色。大多数用户都有用户角色,只有3个管理员,现在我需要创建3个只读用户。这些用户只能查看整个网站,不能编辑网站的任何部分。在我看来,我有这些:

 @{
        var simpleRoles = (RoleProvider)Roles.Provider;
    }
    @if (simpleRoles.IsUserInRole(User.Identity.Name, "admin"))
    {
}

仅为管理员限制某些区域,对于只读用户我是否需要这样的东西?

3 个答案:

答案 0 :(得分:2)

由于您有管理员和用户,因此您可能需要创建“管理员”区域和“用户”区域。我在下面建议的只是你想要隐藏角色的几个视图。在管理区域中,您可以将authorize属性添加到该区域的基本控制器,以便只有管理员才能更新内容。否则,如果你想隐藏不同角色的更新按钮,你必须在视图中有if语句,这可能会变得混乱。

更新:

以下是区域概述的链接。区域很好,因为你可以创建一个名为“Admin”的区域,在该区域内你将拥有与不同区域分开的控制器/视图/视图模型等。在此区域内,您可以包含更新内容的逻辑,而如果您不希望角色更新内容,则不要在其区域内包含逻辑。希望链接能够比我更好地解释它。

当我为项目使用区域时,我将创建一个所有控制器都继承的基本控制器。我的基本控制器可能是一个例子:

[Authorize(Roles="Admin")]
public class AdminBaseController : Controller
{
    ...
}

然后在该区域的所有控制器中,我将从AdminBaseController继承,以便只有管理员才能访问该网站的这一部分。

public class HomeController : AdminBaseController
{
    ...
}

http://www.dotnet-tricks.com/Tutorial/mvc/a9P1010113-MVC-Areas-with-example.html

在视图上添加Authorize属性:

例如,如果您只想让管理员查看view.cshtml文件,那么您可以在控制器操作上执行以下操作:

[Authorize(Roles="admin")]
public ActionResult View() 
{
    ....
}

如果用户不在该角色,那么他们将能够访问该视图。

对于多个角色,您可以执行以下操作:

[Authorize(Roles="admin, user")]
public ActionResult View()
{
    ...
}

这将允许任何管理员或用户查看该页面。 (他们不必兼任两种角色)。

答案 1 :(得分:1)

阐述我上面的评论。使用授权属性修改控制器操作会将其锁定到特定角色。这不能解决只读类型角色的问题。您需要在控制器操作中使用一些逻辑来评估角色,然后返回不同的视图。我建议将其放在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
    }
}

答案 2 :(得分:0)

在.cshtml中试试这个

@if ( User.Identity.IsAuthenticated ){ if ( User.IsInRole("Admin") ){ @Html.ActionLink("Admin", "AdminController")
} }