1

私は customroleprovider.cs を持っています。ユーザーとそのロールを持つユーザー テーブルがあります。ほとんどのユーザーはユーザーとしての役割を持っています。管理者は 3 人しかいないため、3 人の読み取り専用ユーザーを作成する必要があります。これらのユーザーは Web サイト全体を表示することしかできず、Web サイトのどの部分も編集できません。私の見解では、私はこれらを持っています:

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

一部の領域を管理者のみに制限するには、読み取り専用ユーザーにこのようなものが必要ですか?

4

3 に答える 3

2

管理者とユーザーがいるので、「管理者」エリアと「ユーザー」エリアを作成することができます。以下で提案するのは、役割から隠したいビューがいくつかある場合のみです。管理領域では、その領域のベース コントローラに authorize 属性を追加して、管理者だけがコンテンツを更新できるようにすることができます。そうしないと、更新ボタンをロールのさまざまな表示から非表示にしたい場合に、ビューに if ステートメントが必要になり、面倒になる可能性があります。

アップデート:

以下は、エリアの概要へのリンクです。「管理者」と呼ばれるエリアを作成でき、そのエリア内に別のエリアとは別のコントローラー/ビュー/ビューモデルなどがあるため、エリアは便利です。この領域内に、コンテンツを更新するためのロジックを含めることができますが、ロールにコンテンツを更新させたくない場合は、その領域内にロジックを含めないでください。リンクが私よりもうまく説明してくれることを願っています。

プロジェクトで領域を使用するときは、すべてのコントローラーが継承するベース コントローラーを作成します。私のベースコントローラーがどのように見えるかの例は次のとおりです。

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

次に、この領域のすべてのコントローラーで AdminBaseController を継承し、管理者のみが Web サイトのこのセクションにアクセスできるようにします。

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()
{
    ...
}

これにより、管理者またはユーザーであるすべてのユーザーがページを表示できるようになります。(両方の役割である必要はありません)。

于 2013-09-30T19:01:45.467 に答える
1

上記の私のコメントについて詳しく説明します。コントローラ アクションを 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
    }
}
于 2013-09-30T19:30:06.007 に答える
0

.cshtmlでこれを試してください

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

于 2016-10-06T20:18:53.400 に答える