Вопрос по asp.net-mvc-3, asp.net-mvc – MVC 3 - доступ только для конкретного пользователя

4

В моем веб-приложении зарегистрированные пользователи могут добавлять новый контент и редактировать его позже. Я хочу, чтобы только автор контента мог его редактировать. Есть ли какой-нибудь разумный способ сделать это, кроме написания кода вручную во всех методах действия, который проверяет, является ли зарегистрированный пользователь тем же, что и автор? Любой атрибут, который я мог бы использовать для всего контроллера?

Контроллер или атрибут действия не будут иметь контекст отдельной публикации и автора, просто кто вошел в систему в целом. Вы лучше сравниваете автора с постом, описывающим действие по поиску атрибута, который позаботился бы о нем. Brad Christie

Ваш Ответ

2   ответа
0

Я мог бы:

  1. Save the db.aspnet_Users columm UserId (Guid) against the content record
  2. Write an extension method for your content model which verifies the current users Guid against the saved contents User Guid
  3. I would write some code that overrides this functionality for your Admin logins (I would create an Admin Role).
6

Any attribute that I could use for the whole controller?

Да, вы могли бы продлитьAuthorize атрибут с пользовательским:

public class AuthorizeAuthorAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isAuthorized = base.AuthorizeCore(httpContext);
        if (!isAuthorized)
        {
            // the user is either not authenticated or
            // not in roles => no need to continue any further
            return false;
        }

        // get the currently logged on user
        var username = httpContext.User.Identity.Name;

        // get the id of the article that he is trying to manipulate
        // from the route data (this assumes that the id is passed as a route
        // data parameter: /foo/edit/123). If this is not the case and you 
        // are using query string parameters you could fetch the id using the Request
        var id = httpContext.Request.RequestContext.RouteData.Values["id"] as string;

        // Now that we have the current user and the id of the article he
        // is trying to manipualte all that's left is go ahead and look in 
        // our database to see if this user is the owner of the article
        return IsUserOwnerOfArticle(username, id);
    }

    private bool IsUserOwnerOfArticle(string username, string articleId)
    {
        throw new NotImplementedException();
    }
}

а потом:

[HttpPost]
[AuthorizeAuthor]
public ActionResult Edit(int id)
{
    ... perform the edit
}

Похожие вопросы