Проверка основанных на ролях разрешений для всех действий централизованным или чистым способом в приложениях .Net - PullRequest
3 голосов
/ 13 февраля 2011

Я пытаюсь избежать обычного:

if(!user.HasPermission(Actions.UpdateRecord))
{
 // code to update record
}

для большого количества разрешений по всему моему приложению.

Я ищу способ проверки разрешений в эффективноми (если возможно) элегантная манера.В этом случае в каждом разрешении есть несколько действий.

Ответы [ 2 ]

1 голос
/ 13 февраля 2011

Как насчет размещения декоратора на ваших объектах доступа к данным. Шаблон декоратора очень полезен для таких вещей, как обработка разрешений. Ваш слой dataAccess может осуществлять только доступ к данным, а затем вы украшаете эти классы чем-то, что обрабатывает только разрешения и разрешения.

Это очень элегантно ...

http://en.wikipedia.org/wiki/Decorator_pattern

0 голосов
/ 13 февраля 2011

Есть много способов сделать это.Важно то, что вы хотите инкапсулировать заботу о проверке разрешений.Один из способов сделать это - использовать шаблон стратегии.Инкапсулируйте действие в классе и получите класс через фабричный метод.Фабрика может выполнить проверку безопасности и вернуть другую стратегию для запрещенных действий.

Например:

public abstract class SecureAction
{
    public void PerformAction();
}

public class UpdateRecords : SecureAction
{
    public void PerformAction()
    {
        //code to do the update
    }
}

public class DoesNotHavePermissionAction : SecureAction
{
    public void PerformAction()
    {
        //code to handle missing permissions
    }
}

public class SecureActionFactory
{
    public void GetUpdateRecordsAction(User user)
    {
        if(user.HasPermissions(Actions.UpdateRecord)) {return new UpdateRecordsAction();}

        return new DoesNotHavePermissionAction();
    }
}
...